diff options
| -rw-r--r-- | mips/hgen/ast.hgen | 1 | ||||
| -rw-r--r-- | mips/hgen/fold.hgen | 1 | ||||
| -rw-r--r-- | mips/hgen/map.hgen | 1 | ||||
| -rw-r--r-- | mips/hgen/pretty.hgen | 2 | ||||
| -rw-r--r-- | mips/hgen/sail_trans_out.hgen | 1 | ||||
| -rw-r--r-- | mips/hgen/trans_sail.hgen | 2 | ||||
| -rw-r--r-- | mips/mips_insts.sail | 6 | ||||
| -rw-r--r-- | mips/mips_regfp.sail | 1 |
8 files changed, 14 insertions, 1 deletions
diff --git a/mips/hgen/ast.hgen b/mips/hgen/ast.hgen index 1e70d949..a251adff 100644 --- a/mips/hgen/ast.hgen +++ b/mips/hgen/ast.hgen @@ -1,3 +1,4 @@ +| `MIPSThreadStart | `MIPSRType of mipsRTypeOp * reg * reg * reg | `MIPSIType of mipsITypeOp * reg * reg * bit16 | `MIPSShiftI of mipsShiftIOp * reg * reg * bit5 diff --git a/mips/hgen/fold.hgen b/mips/hgen/fold.hgen index fb2f6de2..05b9c808 100644 --- a/mips/hgen/fold.hgen +++ b/mips/hgen/fold.hgen @@ -1,3 +1,4 @@ +| `MIPSThreadStart -> (y_reg, y_sreg) | `MIPSRType (op, rd, rs, rt) -> fold_reg rt (fold_reg rs (fold_reg rd (y_reg, y_sreg))) | `MIPSIType (op, rs, rt, imm) -> fold_reg rs (fold_reg rt (y_reg, y_sreg)) | `MIPSShiftI (op, rd, rt, imm) -> fold_reg rt (fold_reg rd (y_reg, y_sreg)) diff --git a/mips/hgen/map.hgen b/mips/hgen/map.hgen index 5c6cde6a..f5116bae 100644 --- a/mips/hgen/map.hgen +++ b/mips/hgen/map.hgen @@ -1,3 +1,4 @@ +| `MIPSThreadStart -> `MIPSThreadStart | `MIPSRType (op, rd, rs, rt) -> `MIPSRType (op, map_reg rd, map_reg rs, map_reg rt) | `MIPSIType (op, rs, rt, imm) -> `MIPSIType (op, map_reg rs, map_reg rt, imm) | `MIPSShiftI (op, rd, rt, imm) -> `MIPSShiftI (op, map_reg rd, map_reg rt, imm) diff --git a/mips/hgen/pretty.hgen b/mips/hgen/pretty.hgen index d9b94def..e4bc0b6d 100644 --- a/mips/hgen/pretty.hgen +++ b/mips/hgen/pretty.hgen @@ -1,4 +1,4 @@ -| `MIPSThreadStart -> "START" (* TODO *) +| `MIPSThreadStart -> "syscall 0xfffff" (* thread start *) | `MIPSStopFetching -> "STOP" (* TODO *) | `MIPSRType (op, rd,rs,rt) -> sprintf "%s %s,%s,%s" (pp_rtype_op op) (pp_reg rd) (pp_reg rs) (pp_reg rt) diff --git a/mips/hgen/sail_trans_out.hgen b/mips/hgen/sail_trans_out.hgen index 2911137e..6c956675 100644 --- a/mips/hgen/sail_trans_out.hgen +++ b/mips/hgen/sail_trans_out.hgen @@ -1,3 +1,4 @@ +| ("SYSCALL_THREAD_START", []) -> `MIPSThreadStart | ("ADD" , [rs; rt; rd]) -> `MIPSRType (MIPSROpADD , (translate_out_ireg rd), (translate_out_ireg rs), (translate_out_ireg rt)) | ("ADDU" , [rs; rt; rd]) -> `MIPSRType (MIPSROpADDU , (translate_out_ireg rd), (translate_out_ireg rs), (translate_out_ireg rt)) | ("AND" , [rs; rt; rd]) -> `MIPSRType (MIPSROpAND , (translate_out_ireg rd), (translate_out_ireg rs), (translate_out_ireg rt)) diff --git a/mips/hgen/trans_sail.hgen b/mips/hgen/trans_sail.hgen index 4b7c7882..9a34ff49 100644 --- a/mips/hgen/trans_sail.hgen +++ b/mips/hgen/trans_sail.hgen @@ -1,3 +1,5 @@ +| `MIPSThreadStart -> + ("SYSCALL_THREAD_START", [], []) | `MIPSStopFetching -> ("ImplementationDefinedStopFetching", [], diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail index fac2aa52..60ef8f2f 100644 --- a/mips/mips_insts.sail +++ b/mips/mips_insts.sail @@ -1008,6 +1008,12 @@ function clause execute (BCMPZ(rs, imm, cmp, link, likely)) = (* SYSCALL/BREAK/WAIT/Trap *) (**************************************************************************************) +(* Co-opt syscall 0xfffff for use as thread start in pccmem *) +union ast member unit SYSCALL_THREAD_START +function clause decode (0b000000 : 0xfffff : 0b001100) = + Some(SYSCALL_THREAD_START) +function clause execute (SYSCALL_THREAD_START) = () + union ast member unit SYSCALL function clause decode (0b000000 : (bit[20]) code : 0b001100) = Some(SYSCALL) (* code is ignored *) diff --git a/mips/mips_regfp.sail b/mips/mips_regfp.sail index 390aa82b..b1a86b56 100644 --- a/mips/mips_regfp.sail +++ b/mips/mips_regfp.sail @@ -326,6 +326,7 @@ function (regfps,regfps,regfps,niafps,diafp,instruction_kind) initial_analysis ( let (bit[64]) offset = (EXTS(imm : 0b00) + 4) in Dia := DIAFP_concrete (PC + offset); } + case (SYSCALL_THREAD_START) -> () (* case (SYSCALL) = |
