diff --git a/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc b/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc index 06db5927c6..fccc82d9d2 100644 --- a/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc +++ b/Ghidra/Processors/Toy/data/languages/toyInstructions.sinc @@ -54,6 +54,12 @@ # 1111 0110 ssss 1ccc # call rs if ccc call rs # 1111 1nnn nnnn nnnn # call n call n # +#### user-defined +# 1010 0010 ssss 0000 # user_one rs user_one rs +# 1010 0010 ssss 0000 # user_two rs user_two rs +# 1010 0011 0000 0000 # user_three user_three +# 1010 0100 ssss tttt # user_four rs rt user_four rs rt +# #### RESERVED # 1101 1001 xxxx xxxx # RESERVED BANK # 1101 1010 xxxx xxxx # RESERVED BANK @@ -133,6 +139,10 @@ macro logicflags() { V = 0; } +define pcodeop pcodeop_one; +define pcodeop pcodeop_two; +define pcodeop pcodeop_three; + # operations :imm rd, Imm11 is $(INSTR_PHASE) op1515=0x0 & rd & Imm11 { logicflags(); rd = Imm11; resultflags(rd); } @@ -202,3 +212,8 @@ macro logicflags() { # 1111 0110 ssss 1ccc # call rs if ccc call rs :call^COND rs is $(INSTR_PHASE) op1215=0xf & op0811=0x6 & rs & op0303=0x1 & COND { build COND; lr = inst_next; call [rs]; } + +:user_one rs is $(INSTR_PHASE) op1215=0xa & op0811=0x01 & rs & op0003=0x0 { pcodeop_one(rs);} +:user_two rs is $(INSTR_PHASE) op1215=0xa & op0811=0x02 & rs & op0003=0x0 { pcodeop_two(rs); pcodeop_three();} +:user_three is $(INSTR_PHASE) op1215=0xa & op0811=0x03 & op0007=0x0 { pcodeop_three();} +:user_four rs rt is $(INSTR_PHASE) op1215=0xa & op0811=0x04 & rs & rt { pcodeop_one(rs); call [rt]; pcodeop_three();}