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}};