diff options
author | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2011-04-12 18:27:26 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2011-04-12 18:27:26 -0700 |
commit | 64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a (patch) | |
tree | 4ff3a9e8f5a2d65a66d15257f8abe3056bb1ca2e | |
parent | 85d19630004cddba58c44e2e0199a715b9c74b44 (diff) | |
download | pk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.zip pk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.tar.gz pk-64d0c6765ce07cfe3fd860a4428fa5e2cc89d97a.tar.bz2 |
[xcc,pk,sim] added privileged cflush instruction
-rw-r--r-- | pk/frontend.c | 1 | ||||
-rw-r--r-- | pk/memset.c | 16 | ||||
-rw-r--r-- | pk/riscv-opc.h | 2 |
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 |