aboutsummaryrefslogtreecommitdiff
path: root/pk
diff options
context:
space:
mode:
Diffstat (limited to 'pk')
-rw-r--r--pk/frontend.c1
-rw-r--r--pk/memset.c16
-rw-r--r--pk/riscv-opc.h2
3 files changed, 11 insertions, 8 deletions
diff --git a/pk/frontend.c b/pk/frontend.c
index 9641352..fa5db51 100644
--- a/pk/frontend.c
+++ b/pk/frontend.c
@@ -18,6 +18,7 @@ sysret_t frontend_syscall(long n, long a0, long a1, long a2, long a3)
magic_mem[4] = a3;
asm volatile ("fence");
+ asm volatile ("cflush");
mtpcr(magic_mem,PCR_TOHOST);
while(mfpcr(PCR_FROMHOST) == 0);
diff --git a/pk/memset.c b/pk/memset.c
index 53ecc85..3abb35a 100644
--- a/pk/memset.c
+++ b/pk/memset.c
@@ -9,6 +9,14 @@ void* memset(void* m, int ch, size_t s)
{
size_t i = 0;
char* mem = (char*)m;
+ long* lmem = (long*)mem;
+
+ long l = ch & 0xFF;
+ l = l | (l << 8);
+ l = l | (l << 16);
+ #if ULONG_MAX == 18446744073709551615UL
+ l = l | (l << 32);
+ #endif
if(s < 8*sizeof(long))
goto small;
@@ -23,14 +31,6 @@ void* memset(void* m, int ch, size_t s)
s -= n;
}
- long l = ch & 0xFF;
- l = l | (l << 8);
- l = l | (l << 16);
- #if ULONG_MAX == 18446744073709551615UL
- l = l | (l << 32);
- #endif
-
- long* lmem = (long*)mem;
for(i = 0; i < s/sizeof(long) - 7; i += 8)
{
lmem[i+0] = l;
diff --git a/pk/riscv-opc.h b/pk/riscv-opc.h
index 915244b..7174aef 100644
--- a/pk/riscv-opc.h
+++ b/pk/riscv-opc.h
@@ -75,6 +75,8 @@
#define MASK_BREAK 0xffffffff
#define MATCH_LBST_V 0x100b
#define MASK_LBST_V 0x1ffff
+#define MATCH_CFLUSH 0x2fb
+#define MASK_CFLUSH 0xffffffff
#define MATCH_FCVT_S_W 0xe053
#define MASK_FCVT_S_W 0x3ff1ff
#define MATCH_LDSEG_V 0x218b