Browse Source

* fixed bug in thlcgwasm.a_op_reg_reg_reg_checkoverflow that used to generate
code that fails WebAssembly validation

Nikolay Nikolov 1 year ago
parent
commit
9da276b352
1 changed files with 3 additions and 3 deletions
  1. 3 3
      compiler/wasm32/hlcgcpu.pas

+ 3 - 3
compiler/wasm32/hlcgcpu.pas

@@ -1870,21 +1870,21 @@ implementation
                   //todo: any operands needed?
                   list.concat(taicpu.op_none(a_i32_wrap_i64));
                 end;
+              a_load_stack_reg(list,s32inttype,ovloc.register);
             end
           else
             begin
-              a_load_const_stack(list,s32inttype,0,R_INTREGISTER);
               current_asmdata.getjumplabel(lab);
               { can be optimized by removing duplicate xor'ing to convert dst from
                 signed to unsigned quadrant }
               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,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));
               a_label(list,lab);
             end;
-          a_load_stack_reg(list,s32inttype,ovloc.register);
         end
       else
         ovloc.loc:=LOC_VOID;