misc.isa (7422:feddb9077def) | misc.isa (7599:f6bbf266f2c8) |
---|---|
1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating --- 49 unchanged lines hidden (view full) --- 58 59let {{ 60 61 header_output = decoder_output = exec_output = "" 62 63 mrsCpsrCode = "Dest = (Cpsr | CondCodes) & 0xF8FF03DF" 64 mrsCpsrIop = InstObjParams("mrs", "MrsCpsr", "MrsOp", 65 { "code": mrsCpsrCode, | 1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating --- 49 unchanged lines hidden (view full) --- 58 59let {{ 60 61 header_output = decoder_output = exec_output = "" 62 63 mrsCpsrCode = "Dest = (Cpsr | CondCodes) & 0xF8FF03DF" 64 mrsCpsrIop = InstObjParams("mrs", "MrsCpsr", "MrsOp", 65 { "code": mrsCpsrCode, |
66 "predicate_test": condPredicateTest }, []) | 66 "predicate_test": condPredicateTest }, 67 ["IsSerializeAfter"]) |
67 header_output += MrsDeclare.subst(mrsCpsrIop) 68 decoder_output += MrsConstructor.subst(mrsCpsrIop) 69 exec_output += PredOpExecute.subst(mrsCpsrIop) 70 71 mrsSpsrCode = "Dest = Spsr" 72 mrsSpsrIop = InstObjParams("mrs", "MrsSpsr", "MrsOp", 73 { "code": mrsSpsrCode, | 68 header_output += MrsDeclare.subst(mrsCpsrIop) 69 decoder_output += MrsConstructor.subst(mrsCpsrIop) 70 exec_output += PredOpExecute.subst(mrsCpsrIop) 71 72 mrsSpsrCode = "Dest = Spsr" 73 mrsSpsrIop = InstObjParams("mrs", "MrsSpsr", "MrsOp", 74 { "code": mrsSpsrCode, |
74 "predicate_test": predicateTest }, []) | 75 "predicate_test": predicateTest }, 76 ["IsSerializeAfter"]) |
75 header_output += MrsDeclare.subst(mrsSpsrIop) 76 decoder_output += MrsConstructor.subst(mrsSpsrIop) 77 exec_output += PredOpExecute.subst(mrsSpsrIop) 78 79 msrCpsrRegCode = ''' 80 SCTLR sctlr = Sctlr; 81 uint32_t newCpsr = 82 cpsrWriteByInstr(Cpsr | CondCodes, Op1, byteMask, false, sctlr.nmfi); 83 Cpsr = ~CondCodesMask & newCpsr; 84 CondCodes = CondCodesMask & newCpsr; 85 ''' 86 msrCpsrRegIop = InstObjParams("msr", "MsrCpsrReg", "MsrRegOp", 87 { "code": msrCpsrRegCode, | 77 header_output += MrsDeclare.subst(mrsSpsrIop) 78 decoder_output += MrsConstructor.subst(mrsSpsrIop) 79 exec_output += PredOpExecute.subst(mrsSpsrIop) 80 81 msrCpsrRegCode = ''' 82 SCTLR sctlr = Sctlr; 83 uint32_t newCpsr = 84 cpsrWriteByInstr(Cpsr | CondCodes, Op1, byteMask, false, sctlr.nmfi); 85 Cpsr = ~CondCodesMask & newCpsr; 86 CondCodes = CondCodesMask & newCpsr; 87 ''' 88 msrCpsrRegIop = InstObjParams("msr", "MsrCpsrReg", "MsrRegOp", 89 { "code": msrCpsrRegCode, |
88 "predicate_test": condPredicateTest }, []) | 90 "predicate_test": condPredicateTest }, 91 ["IsSerializeAfter","IsNonSpeculative"]) |
89 header_output += MsrRegDeclare.subst(msrCpsrRegIop) 90 decoder_output += MsrRegConstructor.subst(msrCpsrRegIop) 91 exec_output += PredOpExecute.subst(msrCpsrRegIop) 92 93 msrSpsrRegCode = "Spsr = spsrWriteByInstr(Spsr, Op1, byteMask, false);" 94 msrSpsrRegIop = InstObjParams("msr", "MsrSpsrReg", "MsrRegOp", 95 { "code": msrSpsrRegCode, | 92 header_output += MsrRegDeclare.subst(msrCpsrRegIop) 93 decoder_output += MsrRegConstructor.subst(msrCpsrRegIop) 94 exec_output += PredOpExecute.subst(msrCpsrRegIop) 95 96 msrSpsrRegCode = "Spsr = spsrWriteByInstr(Spsr, Op1, byteMask, false);" 97 msrSpsrRegIop = InstObjParams("msr", "MsrSpsrReg", "MsrRegOp", 98 { "code": msrSpsrRegCode, |
96 "predicate_test": predicateTest }, []) | 99 "predicate_test": predicateTest }, 100 ["IsSerializeAfter","IsNonSpeculative"]) |
97 header_output += MsrRegDeclare.subst(msrSpsrRegIop) 98 decoder_output += MsrRegConstructor.subst(msrSpsrRegIop) 99 exec_output += PredOpExecute.subst(msrSpsrRegIop) 100 101 msrCpsrImmCode = ''' 102 SCTLR sctlr = Sctlr; 103 uint32_t newCpsr = 104 cpsrWriteByInstr(Cpsr | CondCodes, imm, byteMask, false, sctlr.nmfi); 105 Cpsr = ~CondCodesMask & newCpsr; 106 CondCodes = CondCodesMask & newCpsr; 107 ''' 108 msrCpsrImmIop = InstObjParams("msr", "MsrCpsrImm", "MsrImmOp", 109 { "code": msrCpsrImmCode, | 101 header_output += MsrRegDeclare.subst(msrSpsrRegIop) 102 decoder_output += MsrRegConstructor.subst(msrSpsrRegIop) 103 exec_output += PredOpExecute.subst(msrSpsrRegIop) 104 105 msrCpsrImmCode = ''' 106 SCTLR sctlr = Sctlr; 107 uint32_t newCpsr = 108 cpsrWriteByInstr(Cpsr | CondCodes, imm, byteMask, false, sctlr.nmfi); 109 Cpsr = ~CondCodesMask & newCpsr; 110 CondCodes = CondCodesMask & newCpsr; 111 ''' 112 msrCpsrImmIop = InstObjParams("msr", "MsrCpsrImm", "MsrImmOp", 113 { "code": msrCpsrImmCode, |
110 "predicate_test": condPredicateTest }, []) | 114 "predicate_test": condPredicateTest }, 115 ["IsSerializeAfter","IsNonSpeculative"]) |
111 header_output += MsrImmDeclare.subst(msrCpsrImmIop) 112 decoder_output += MsrImmConstructor.subst(msrCpsrImmIop) 113 exec_output += PredOpExecute.subst(msrCpsrImmIop) 114 115 msrSpsrImmCode = "Spsr = spsrWriteByInstr(Spsr, imm, byteMask, false);" 116 msrSpsrImmIop = InstObjParams("msr", "MsrSpsrImm", "MsrImmOp", 117 { "code": msrSpsrImmCode, | 116 header_output += MsrImmDeclare.subst(msrCpsrImmIop) 117 decoder_output += MsrImmConstructor.subst(msrCpsrImmIop) 118 exec_output += PredOpExecute.subst(msrCpsrImmIop) 119 120 msrSpsrImmCode = "Spsr = spsrWriteByInstr(Spsr, imm, byteMask, false);" 121 msrSpsrImmIop = InstObjParams("msr", "MsrSpsrImm", "MsrImmOp", 122 { "code": msrSpsrImmCode, |
118 "predicate_test": predicateTest }, []) | 123 "predicate_test": predicateTest }, 124 ["IsSerializeAfter","IsNonSpeculative"]) |
119 header_output += MsrImmDeclare.subst(msrSpsrImmIop) 120 decoder_output += MsrImmConstructor.subst(msrSpsrImmIop) 121 exec_output += PredOpExecute.subst(msrSpsrImmIop) 122 123 revCode = ''' 124 uint32_t val = Op1; 125 Dest = swap_byte(val); 126 ''' --- 477 unchanged lines hidden (view full) --- 604 return new UndefinedInstruction; 605#else 606 return new UndefinedInstruction(false, mnemonic); 607#endif 608 MiscDest = Op1; 609 ''' 610 mcr15Iop = InstObjParams("mcr", "Mcr15", "RegRegOp", 611 { "code": mcr15code, | 125 header_output += MsrImmDeclare.subst(msrSpsrImmIop) 126 decoder_output += MsrImmConstructor.subst(msrSpsrImmIop) 127 exec_output += PredOpExecute.subst(msrSpsrImmIop) 128 129 revCode = ''' 130 uint32_t val = Op1; 131 Dest = swap_byte(val); 132 ''' --- 477 unchanged lines hidden (view full) --- 610 return new UndefinedInstruction; 611#else 612 return new UndefinedInstruction(false, mnemonic); 613#endif 614 MiscDest = Op1; 615 ''' 616 mcr15Iop = InstObjParams("mcr", "Mcr15", "RegRegOp", 617 { "code": mcr15code, |
612 "predicate_test": predicateTest }, []) | 618 "predicate_test": predicateTest }, 619 ["IsSerializeAfter","IsNonSpeculative"]) |
613 header_output += RegRegOpDeclare.subst(mcr15Iop) 614 decoder_output += RegRegOpConstructor.subst(mcr15Iop) 615 exec_output += PredOpExecute.subst(mcr15Iop) 616 617 mrc15UserIop = InstObjParams("mrc", "Mrc15User", "RegRegOp", 618 { "code": "Dest = MiscOp1;", 619 "predicate_test": predicateTest }, []) 620 header_output += RegRegOpDeclare.subst(mrc15UserIop) 621 decoder_output += RegRegOpConstructor.subst(mrc15UserIop) 622 exec_output += PredOpExecute.subst(mrc15UserIop) 623 624 mcr15UserIop = InstObjParams("mcr", "Mcr15User", "RegRegOp", 625 { "code": "MiscDest = Op1", | 620 header_output += RegRegOpDeclare.subst(mcr15Iop) 621 decoder_output += RegRegOpConstructor.subst(mcr15Iop) 622 exec_output += PredOpExecute.subst(mcr15Iop) 623 624 mrc15UserIop = InstObjParams("mrc", "Mrc15User", "RegRegOp", 625 { "code": "Dest = MiscOp1;", 626 "predicate_test": predicateTest }, []) 627 header_output += RegRegOpDeclare.subst(mrc15UserIop) 628 decoder_output += RegRegOpConstructor.subst(mrc15UserIop) 629 exec_output += PredOpExecute.subst(mrc15UserIop) 630 631 mcr15UserIop = InstObjParams("mcr", "Mcr15User", "RegRegOp", 632 { "code": "MiscDest = Op1", |
626 "predicate_test": predicateTest }, []) | 633 "predicate_test": predicateTest }, 634 ["IsSerializeAfter","IsNonSpeculative"]) |
627 header_output += RegRegOpDeclare.subst(mcr15UserIop) 628 decoder_output += RegRegOpConstructor.subst(mcr15UserIop) 629 exec_output += PredOpExecute.subst(mcr15UserIop) 630 631 enterxCode = ''' 632 FNPC = NPC | (1ULL << PcJBitShift) | (1ULL << PcTBitShift); 633 ''' 634 enterxIop = InstObjParams("enterx", "Enterx", "PredOp", --- 47 unchanged lines hidden (view full) --- 682 if (setMode) { 683 cpsr.mode = mode; 684 } 685 } 686 Cpsr = cpsr; 687 ''' 688 cpsIop = InstObjParams("cps", "Cps", "ImmOp", 689 { "code": cpsCode, | 635 header_output += RegRegOpDeclare.subst(mcr15UserIop) 636 decoder_output += RegRegOpConstructor.subst(mcr15UserIop) 637 exec_output += PredOpExecute.subst(mcr15UserIop) 638 639 enterxCode = ''' 640 FNPC = NPC | (1ULL << PcJBitShift) | (1ULL << PcTBitShift); 641 ''' 642 enterxIop = InstObjParams("enterx", "Enterx", "PredOp", --- 47 unchanged lines hidden (view full) --- 690 if (setMode) { 691 cpsr.mode = mode; 692 } 693 } 694 Cpsr = cpsr; 695 ''' 696 cpsIop = InstObjParams("cps", "Cps", "ImmOp", 697 { "code": cpsCode, |
690 "predicate_test": predicateTest }, []) | 698 "predicate_test": predicateTest }, 699 ["IsSerializeAfter","IsNonSpeculative"]) |
691 header_output += ImmOpDeclare.subst(cpsIop) 692 decoder_output += ImmOpConstructor.subst(cpsIop) 693 exec_output += PredOpExecute.subst(cpsIop) 694}}; | 700 header_output += ImmOpDeclare.subst(cpsIop) 701 decoder_output += ImmOpConstructor.subst(cpsIop) 702 exec_output += PredOpExecute.subst(cpsIop) 703}}; |