Module Arm_shift

val lift_c : src:Bap.Std.exp -> Arm_types.shift -> shift:Bap.Std.exp -> Bap.Std.typ -> Bap.Std.exp * Bap.Std.exp

Need the operand and the carry flag value src - the source, if you intend to use the carry bit, this must not be the destination of the shift expression. This means it must be a temp that contains the value of the source not the actual source itself shift_type - the type of shift shift - must be a exp that is the amount of the shift (ignored for rrx)

val lift_r : src:Bap.Std.exp -> Arm_types.op -> shift:Bap.Std.exp -> Bap.Std.typ -> Bap.Std.exp * Bap.Std.exp
val lift_i : src:Bap.Std.exp -> Arm_types.op -> Bap.Std.typ -> Bap.Std.exp * Bap.Std.exp

decodes an immediate shifted operand * src - the operand to be shifted, cannot be the destination * in practice this means it must be a temp variable. * shift_type - an int64, bits 2 through 0 represent the shift type * valid shift types are number 1 through 5 * bits 3 and higher represent the shift amount if this is an * immediate shift. For register shifts these upper bits are 0. * If the shift type is RRX, a shift amount of 1 is implied. * t - the type *

val lift_mem : src:Bap.Std.exp -> Arm_types.op -> Bap.Std.typ -> Bap.Std.exp

decodes a shifted operand for a memory operation * src - the operand to be shifted * shift - an int64, * bits 11 through 0 represent the shift amount * bits 12 represents whether the expression is added or subtracted * bits 15 through 13 represent the shift type, valid shift types * are number 1 through 5 * typ - the type *