Lines Matching defs:instr

55 static bool isADRP(uint32_t instr) {
56 return (instr & 0x9f000000) == 0x90000000;
65 static bool isLoadStoreClass(uint32_t instr) {
66 return (instr & 0x0a000000) == 0x08000000;
81 static bool isST1MultipleOpcode(uint32_t instr) {
82 return (instr & 0x0000f000) == 0x00002000 ||
83 (instr & 0x0000f000) == 0x00006000 ||
84 (instr & 0x0000f000) == 0x00007000 ||
85 (instr & 0x0000f000) == 0x0000a000;
88 static bool isST1Multiple(uint32_t instr) {
89 return (instr & 0xbfff0000) == 0x0c000000 && isST1MultipleOpcode(instr);
93 static bool isST1MultiplePost(uint32_t instr) {
94 return (instr & 0xbfe00000) == 0x0c800000 && isST1MultipleOpcode(instr);
109 static bool isST1SingleOpcode(uint32_t instr) {
110 return (instr & 0x0040e000) == 0x00000000 ||
111 (instr & 0x0040e000) == 0x00004000 ||
112 (instr & 0x0040e000) == 0x00008000;
115 static bool isST1Single(uint32_t instr) {
116 return (instr & 0xbfff0000) == 0x0d000000 && isST1SingleOpcode(instr);
120 static bool isST1SinglePost(uint32_t instr) {
121 return (instr & 0xbfe00000) == 0x0d800000 && isST1SingleOpcode(instr);
124 static bool isST1(uint32_t instr) {
125 return isST1Multiple(instr) || isST1MultiplePost(instr) ||
126 isST1Single(instr) || isST1SinglePost(instr);
132 static bool isLoadStoreExclusive(uint32_t instr) {
133 return (instr & 0x3f000000) == 0x08000000;
136 static bool isLoadExclusive(uint32_t instr) {
137 return (instr & 0x3f400000) == 0x08400000;
142 static bool isLoadLiteral(uint32_t instr) {
143 return (instr & 0x3b000000) == 0x18000000;
151 static bool isSTNP(uint32_t instr) {
152 return (instr & 0x3bc00000) == 0x28000000;
160 static bool isSTPPost(uint32_t instr) {
161 return (instr & 0x3bc00000) == 0x28800000;
166 static bool isSTPOffset(uint32_t instr) {
167 return (instr & 0x3bc00000) == 0x29000000;
173 static bool isSTPPre(uint32_t instr) {
174 return (instr & 0x3bc00000) == 0x29800000;
177 static bool isSTP(uint32_t instr) {
178 return isSTPPost(instr) || isSTPOffset(instr) || isSTPPre(instr);
184 static bool isLoadStoreUnscaled(uint32_t instr) {
185 return (instr & 0x3b000c00) == 0x38000000;
190 static bool isLoadStoreImmediatePost(uint32_t instr) {
191 return (instr & 0x3b200c00) == 0x38000400;
196 static bool isLoadStoreUnpriv(uint32_t instr) {
197 return (instr & 0x3b200c00) == 0x38000800;
202 static bool isLoadStoreImmediatePre(uint32_t instr) {
203 return (instr & 0x3b200c00) == 0x38000c00;
208 static bool isLoadStoreRegisterOff(uint32_t instr) {
209 return (instr & 0x3b200c00) == 0x38200800;
214 static bool isLoadStoreRegisterUnsigned(uint32_t instr) {
215 return (instr & 0x3b000000) == 0x39000000;
219 static uint32_t getRt(uint32_t instr) { return (instr & 0x1f); }
222 static uint32_t getRn(uint32_t instr) { return (instr >> 5) & 0x1f; }
231 static bool isBranch(uint32_t instr) {
232 return ((instr & 0xfe000000) == 0xd6000000) || // Cond branch.
233 ((instr & 0xfe000000) == 0x54000000) || // Uncond branch reg.
234 ((instr & 0x7c000000) == 0x14000000) || // Uncond branch imm.
235 ((instr & 0x7c000000) == 0x34000000); // Compare and test branch.
238 static bool isV8SingleRegisterNonStructureLoadStore(uint32_t instr) {
239 return isLoadStoreUnscaled(instr) || isLoadStoreImmediatePost(instr) ||
240 isLoadStoreUnpriv(instr) || isLoadStoreImmediatePre(instr) ||
241 isLoadStoreRegisterOff(instr) || isLoadStoreRegisterUnsigned(instr);
248 static bool isV8NonStructureLoad(uint32_t instr) {
249 if (isLoadExclusive(instr))
251 if (isLoadLiteral(instr))
253 else if (isV8SingleRegisterNonStructureLoadStore(instr)) {
256 uint32_t size = (instr >> 30) & 0xff;
257 uint32_t v = (instr >> 26) & 0x1;
258 uint32_t opc = (instr >> 22) & 0x3;
274 static bool hasWriteback(uint32_t instr) {
275 return isLoadStoreImmediatePre(instr) || isLoadStoreImmediatePost(instr) ||
276 isSTPPre(instr) || isSTPPost(instr) || isST1SinglePost(instr) ||
277 isST1MultiplePost(instr);
283 static bool doesLoadStoreWriteToReg(uint32_t instr, uint32_t reg) {
284 return (isV8NonStructureLoad(instr) && getRt(instr) == reg) ||
285 (hasWriteback(instr) && getRn(instr) == reg);