@@ -206,6 +206,17 @@ enum aarch64_insn_data3_type {
206
206
AARCH64_INSN_DATA3_MSUB ,
207
207
};
208
208
209
+ enum aarch64_insn_logic_type {
210
+ AARCH64_INSN_LOGIC_AND ,
211
+ AARCH64_INSN_LOGIC_BIC ,
212
+ AARCH64_INSN_LOGIC_ORR ,
213
+ AARCH64_INSN_LOGIC_ORN ,
214
+ AARCH64_INSN_LOGIC_EOR ,
215
+ AARCH64_INSN_LOGIC_EON ,
216
+ AARCH64_INSN_LOGIC_AND_SETFLAGS ,
217
+ AARCH64_INSN_LOGIC_BIC_SETFLAGS
218
+ };
219
+
209
220
#define __AARCH64_INSN_FUNCS (abbr , mask , val ) \
210
221
static __always_inline bool aarch64_insn_is_##abbr(u32 code) \
211
222
{ return (code & (mask)) == (val); } \
@@ -243,6 +254,14 @@ __AARCH64_INSN_FUNCS(rorv, 0x7FE0FC00, 0x1AC02C00)
243
254
__AARCH64_INSN_FUNCS (rev16 , 0x7FFFFC00 , 0x5AC00400 )
244
255
__AARCH64_INSN_FUNCS (rev32 , 0x7FFFFC00 , 0x5AC00800 )
245
256
__AARCH64_INSN_FUNCS (rev64 , 0x7FFFFC00 , 0x5AC00C00 )
257
+ __AARCH64_INSN_FUNCS (and , 0x7F200000 , 0x0A000000 )
258
+ __AARCH64_INSN_FUNCS (bic , 0x7F200000 , 0x0A200000 )
259
+ __AARCH64_INSN_FUNCS (orr , 0x7F200000 , 0x2A000000 )
260
+ __AARCH64_INSN_FUNCS (orn , 0x7F200000 , 0x2A200000 )
261
+ __AARCH64_INSN_FUNCS (eor , 0x7F200000 , 0x4A000000 )
262
+ __AARCH64_INSN_FUNCS (eon , 0x7F200000 , 0x4A200000 )
263
+ __AARCH64_INSN_FUNCS (ands , 0x7F200000 , 0x6A000000 )
264
+ __AARCH64_INSN_FUNCS (bics , 0x7F200000 , 0x6A200000 )
246
265
__AARCH64_INSN_FUNCS (b , 0xFC000000 , 0x14000000 )
247
266
__AARCH64_INSN_FUNCS (bl , 0xFC000000 , 0x94000000 )
248
267
__AARCH64_INSN_FUNCS (cbz , 0xFE000000 , 0x34000000 )
@@ -323,6 +342,12 @@ u32 aarch64_insn_gen_data3(enum aarch64_insn_register dst,
323
342
enum aarch64_insn_register reg2 ,
324
343
enum aarch64_insn_variant variant ,
325
344
enum aarch64_insn_data3_type type );
345
+ u32 aarch64_insn_gen_logical_shifted_reg (enum aarch64_insn_register dst ,
346
+ enum aarch64_insn_register src ,
347
+ enum aarch64_insn_register reg ,
348
+ int shift ,
349
+ enum aarch64_insn_variant variant ,
350
+ enum aarch64_insn_logic_type type );
326
351
327
352
bool aarch64_insn_hotpatch_safe (u32 old_insn , u32 new_insn );
328
353
0 commit comments