aboutsummaryrefslogtreecommitdiff
path: root/pk
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-12 18:27:26 -0700
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-12 18:27:26 -0700
commit64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a (patch)
tree4ff3a9e8f5a2d65a66d15257f8abe3056bb1ca2e /pk
parent85d19630004cddba58c44e2e0199a715b9c74b44 (diff)
downloadpk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.zip
pk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.tar.gz
pk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.tar.bz2
[xcc,pk,sim] added privileged cflush instruction
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