File tree 2 files changed +13
-0
lines changed
2 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -4202,6 +4202,14 @@ Definition SymexNormalInstruction {opts : symbolic_options_computed_opt} {descr:
4202
4202
| (mov | movzx | movabs | movdqa | movdqu | movq | movd | movups), [dst; src] => (* Note: unbundle when switching from N to Z *)
4203
4203
v <- GetOperand src;
4204
4204
SetOperand dst v
4205
+ | movsx, [dst; src] => (* Move with Sign-Extend *)
4206
+ v <- GetOperand src;
4207
+ src_size <- match standalone_operand_size src with
4208
+ | Some s => ret s
4209
+ | None => err (error.ambiguous_operation_size instr)
4210
+ end ;
4211
+ let v := signed src_size v in
4212
+ SetOperand dst v
4205
4213
| xchg, [a; b] => (* Note: unbundle when switching from N to Z *)
4206
4214
va <- GetOperand a;
4207
4215
vb <- GetOperand b;
Original file line number Diff line number Diff line change @@ -168,6 +168,11 @@ Definition DenoteNormalInstruction (st : machine_state) (instr : NormalInstructi
168
168
| (mov | movzx | movabs | movdqa | movdqu | movq | movd | movups), [dst; src] => (* Note: unbundle when switching from N to Z *)
169
169
v <- DenoteOperand sa s st src;
170
170
SetOperand sa s st dst v
171
+ | movsx, [dst; src] => (* Move with Sign-Extend *)
172
+ v <- DenoteOperand sa s st src;
173
+ src_size <- standalone_operand_size src ;
174
+ let v := signed src_size v in
175
+ SetOperand sa s st dst v
171
176
| xchg, [a; b] => (* Flags Affected: None *)
172
177
va <- DenoteOperand sa s st a;
173
178
vb <- DenoteOperand sa s st b;
You can’t perform that action at this time.
0 commit comments