mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 04:49:20 +02:00
* fixed bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow that used to generate
code that fails WebAssembly validation
This commit is contained in:
parent
492717a25c
commit
9da276b352
@ -1870,21 +1870,21 @@ implementation
|
|||||||
//todo: any operands needed?
|
//todo: any operands needed?
|
||||||
list.concat(taicpu.op_none(a_i32_wrap_i64));
|
list.concat(taicpu.op_none(a_i32_wrap_i64));
|
||||||
end;
|
end;
|
||||||
|
a_load_stack_reg(list,s32inttype,ovloc.register);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
a_load_const_stack(list,s32inttype,0,R_INTREGISTER);
|
|
||||||
current_asmdata.getjumplabel(lab);
|
current_asmdata.getjumplabel(lab);
|
||||||
{ can be optimized by removing duplicate xor'ing to convert dst from
|
{ can be optimized by removing duplicate xor'ing to convert dst from
|
||||||
signed to unsigned quadrant }
|
signed to unsigned quadrant }
|
||||||
list.concat(taicpu.op_none(a_block));
|
list.concat(taicpu.op_none(a_block));
|
||||||
|
a_load_const_reg(list,s32inttype,0,ovloc.register);
|
||||||
a_cmp_reg_reg_label(list,size,OC_B,dst,src1,lab);
|
a_cmp_reg_reg_label(list,size,OC_B,dst,src1,lab);
|
||||||
a_cmp_reg_reg_label(list,size,OC_B,dst,src2,lab);
|
a_cmp_reg_reg_label(list,size,OC_B,dst,src2,lab);
|
||||||
a_op_const_stack(list,OP_XOR,s32inttype,1);
|
a_load_const_reg(list,s32inttype,1,ovloc.register);
|
||||||
list.concat(taicpu.op_none(a_end_block));
|
list.concat(taicpu.op_none(a_end_block));
|
||||||
a_label(list,lab);
|
a_label(list,lab);
|
||||||
end;
|
end;
|
||||||
a_load_stack_reg(list,s32inttype,ovloc.register);
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ovloc.loc:=LOC_VOID;
|
ovloc.loc:=LOC_VOID;
|
||||||
|
Loading…
Reference in New Issue
Block a user