Browse Source

Assume pc-relative addressing

pull/2/head
Andrew Waterman 12 years ago
parent
commit
b71e8ecfda
  1. 48
      pk/encoding.h
  2. 3
      pk/entry.S
  3. 14
      pk/pk.S
  4. 1
      pk/pk.ld

48
pk/encoding.h

@ -288,7 +288,7 @@
#define MASK_SRET 0xffffffff
#define MATCH_FNMADD_S 0x4f
#define MASK_FNMADD_S 0x600007f
#define MATCH_JAL 0x67
#define MATCH_JAL 0x6f
#define MASK_JAL 0x7f
#define MATCH_LWU 0x6003
#define MASK_LWU 0x707f
@ -392,7 +392,7 @@
#define MASK_DIVU 0xfe00707f
#define MATCH_AMOSWAP_W 0x800202f
#define MASK_AMOSWAP_W 0xf800707f
#define MATCH_JALR 0x6f
#define MATCH_JALR 0x67
#define MASK_JALR 0x707f
#define MATCH_FSD 0x3027
#define MASK_FSD 0x707f
@ -412,32 +412,32 @@
#define MASK_FMSUB_D 0x600007f
#define MATCH_SD 0x3023
#define MASK_SD 0x707f
#define CSR_SUP0 0x500
#define CSR_FFLAGS 0x1
#define CSR_FRM 0x2
#define CSR_FCSR 0x3
#define CSR_CYCLE 0x4
#define CSR_TIME 0x5
#define CSR_INSTRET 0x6
#define CSR_SUP0 0x500
#define CSR_SUP1 0x501
#define CSR_EPC 0x502
#define CSR_BADVADDR 0x503
#define CSR_PTBR 0x504
#define CSR_ASID 0x505
#define CSR_COUNT 0x506
#define CSR_COMPARE 0x507
#define CSR_EVEC 0x508
#define CSR_CAUSE 0x509
#define CSR_STATUS 0x50a
#define CSR_HARTID 0x50b
#define CSR_IMPL 0x50c
#define CSR_EPC 0x502
#define CSR_FATC 0x50d
#define CSR_SEND_IPI 0x50e
#define CSR_CLEAR_IPI 0x50f
#define CSR_BADVADDR 0x503
#define CSR_PTBR 0x504
#define CSR_STATS 0x51c
#define CSR_RESET 0x51d
#define CSR_TOHOST 0x51e
#define CSR_ASID 0x505
#define CSR_COUNT 0x506
#define CSR_COMPARE 0x507
#define CSR_FROMHOST 0x51f
#define CSR_FATC 0x50d
#define CSR_CYCLE 0xc00
#define CSR_TIME 0xc01
#define CSR_INSTRET 0xc02
#endif
#ifdef DECLARE_INSN
DECLARE_INSN(fmv_s_x, MATCH_FMV_S_X, MASK_FMV_S_X)
@ -597,30 +597,30 @@ DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D)
DECLARE_INSN(sd, MATCH_SD, MASK_SD)
#endif
#ifdef DECLARE_CSR
DECLARE_CSR(sup0, CSR_SUP0)
DECLARE_CSR(fflags, CSR_FFLAGS)
DECLARE_CSR(frm, CSR_FRM)
DECLARE_CSR(fcsr, CSR_FCSR)
DECLARE_CSR(cycle, CSR_CYCLE)
DECLARE_CSR(time, CSR_TIME)
DECLARE_CSR(instret, CSR_INSTRET)
DECLARE_CSR(sup0, CSR_SUP0)
DECLARE_CSR(sup1, CSR_SUP1)
DECLARE_CSR(epc, CSR_EPC)
DECLARE_CSR(badvaddr, CSR_BADVADDR)
DECLARE_CSR(ptbr, CSR_PTBR)
DECLARE_CSR(asid, CSR_ASID)
DECLARE_CSR(count, CSR_COUNT)
DECLARE_CSR(compare, CSR_COMPARE)
DECLARE_CSR(evec, CSR_EVEC)
DECLARE_CSR(cause, CSR_CAUSE)
DECLARE_CSR(status, CSR_STATUS)
DECLARE_CSR(hartid, CSR_HARTID)
DECLARE_CSR(impl, CSR_IMPL)
DECLARE_CSR(epc, CSR_EPC)
DECLARE_CSR(fatc, CSR_FATC)
DECLARE_CSR(send_ipi, CSR_SEND_IPI)
DECLARE_CSR(clear_ipi, CSR_CLEAR_IPI)
DECLARE_CSR(badvaddr, CSR_BADVADDR)
DECLARE_CSR(ptbr, CSR_PTBR)
DECLARE_CSR(stats, CSR_STATS)
DECLARE_CSR(reset, CSR_RESET)
DECLARE_CSR(tohost, CSR_TOHOST)
DECLARE_CSR(asid, CSR_ASID)
DECLARE_CSR(count, CSR_COUNT)
DECLARE_CSR(compare, CSR_COMPARE)
DECLARE_CSR(fromhost, CSR_FROMHOST)
DECLARE_CSR(fatc, CSR_FATC)
DECLARE_CSR(cycle, CSR_CYCLE)
DECLARE_CSR(time, CSR_TIME)
DECLARE_CSR(instret, CSR_INSTRET)
#endif

3
pk/entry.S

@ -44,7 +44,6 @@
STORE x30,30*REGBYTES(x2)
STORE x31,31*REGBYTES(x2)
# get sr, epc, badvaddr, cause
csrr x3,sup0 # x1
csrr x4,sup1 # x2
@ -59,6 +58,8 @@
STORE x7,34*REGBYTES(x2)
STORE x8,35*REGBYTES(x2)
la gp, _gp
# get faulting insn, if it wasn't a fetch-related trap
li x5,-1
STORE x5,36*REGBYTES(x2)

14
pk/pk.S

@ -8,6 +8,7 @@ _start:
la sp, stack_top
la a0, trap_entry
la gp, _gp
csrw evec, a0
li a0, SR_S | SR_PS | SR_EI | SR_S64
@ -17,12 +18,11 @@ _start:
csrw status, a0
and a2, a1, SR_EF
lui a0, %hi(have_fp)
sw a2, %lo(have_fp)(a0)
auipc a0, %pcrel_hi(have_fp)
sw a2, %lo(have_fp)(a0)
and a2, a1, SR_EA
lui a0, %hi(have_accelerator)
sw a2, %lo(have_accelerator)(a0)
and a2, a1, SR_EA
auipc a0, %pcrel_hi(have_accelerator)
sw a2, %lo(have_accelerator)(a0)
lui a0, %hi(boot)
jr a0, %lo(boot)
call boot

1
pk/pk.ld

@ -46,6 +46,7 @@ SECTIONS
/* Start of initialized data segment */
. = ALIGN(16);
PROVIDE( _gp = . + 0x800 );
_fdata = .;
/* data: Writable data */

Loading…
Cancel
Save