@@ -348,14 +348,37 @@ aot_compile_op_i32_trunc_f32(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
348348
349349 POP_F32 (value );
350350
351- if (sign ) {
352- min_value = F32_CONST (-2147483904.0f );
353- max_value = F32_CONST (2147483648.0f );
351+ if (!comp_ctx -> is_indirect_mode ) {
352+ if (sign ) {
353+ min_value = F32_CONST (-2147483904.0f );
354+ max_value = F32_CONST (2147483648.0f );
355+ }
356+ else {
357+ min_value = F32_CONST (-1.0f );
358+ max_value = F32_CONST (4294967296.0f );
359+ }
354360 }
355361 else {
356- min_value = F32_CONST (-1.0f );
357- max_value = F32_CONST (4294967296.0f );
362+ WASMValue wasm_value ;
363+ if (sign ) {
364+ wasm_value .f32 = -2147483904.0f ;
365+ min_value = aot_load_const_from_table (
366+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
367+ wasm_value .f32 = 2147483648.0f ;
368+ max_value = aot_load_const_from_table (
369+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
370+ }
371+ else {
372+ wasm_value .f32 = -1.0f ;
373+ min_value = aot_load_const_from_table (
374+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
375+ wasm_value .f32 = 4294967296.0f ;
376+ max_value = aot_load_const_from_table (
377+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
378+ }
358379 }
380+ CHECK_LLVM_CONST (min_value );
381+ CHECK_LLVM_CONST (max_value );
359382
360383 if (!saturating )
361384 return trunc_float_to_int (
@@ -378,14 +401,37 @@ aot_compile_op_i32_trunc_f64(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
378401
379402 POP_F64 (value );
380403
381- if (sign ) {
382- min_value = F64_CONST (-2147483649.0 );
383- max_value = F64_CONST (2147483648.0 );
404+ if (!comp_ctx -> is_indirect_mode ) {
405+ if (sign ) {
406+ min_value = F64_CONST (-2147483649.0 );
407+ max_value = F64_CONST (2147483648.0 );
408+ }
409+ else {
410+ min_value = F64_CONST (-1.0 );
411+ max_value = F64_CONST (4294967296.0 );
412+ }
384413 }
385414 else {
386- min_value = F64_CONST (-1.0 );
387- max_value = F64_CONST (4294967296.0 );
415+ WASMValue wasm_value ;
416+ if (sign ) {
417+ wasm_value .f64 = -2147483649.0 ;
418+ min_value = aot_load_const_from_table (
419+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
420+ wasm_value .f64 = 2147483648.0 ;
421+ max_value = aot_load_const_from_table (
422+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
423+ }
424+ else {
425+ wasm_value .f64 = -1.0 ;
426+ min_value = aot_load_const_from_table (
427+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
428+ wasm_value .f64 = 4294967296.0 ;
429+ max_value = aot_load_const_from_table (
430+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
431+ }
388432 }
433+ CHECK_LLVM_CONST (min_value );
434+ CHECK_LLVM_CONST (max_value );
389435
390436 if (!saturating )
391437 return trunc_float_to_int (
@@ -509,14 +555,37 @@ aot_compile_op_i64_trunc_f32(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
509555
510556 POP_F32 (value );
511557
512- if (sign ) {
513- min_value = F32_CONST (-9223373136366403584.0f );
514- max_value = F32_CONST (9223372036854775808.0f );
558+ if (!comp_ctx -> is_indirect_mode ) {
559+ if (sign ) {
560+ min_value = F32_CONST (-9223373136366403584.0f );
561+ max_value = F32_CONST (9223372036854775808.0f );
562+ }
563+ else {
564+ min_value = F32_CONST (-1.0f );
565+ max_value = F32_CONST (18446744073709551616.0f );
566+ }
515567 }
516568 else {
517- min_value = F32_CONST (-1.0f );
518- max_value = F32_CONST (18446744073709551616.0f );
569+ WASMValue wasm_value ;
570+ if (sign ) {
571+ wasm_value .f32 = -9223373136366403584.0f ;
572+ min_value = aot_load_const_from_table (
573+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
574+ wasm_value .f32 = 9223372036854775808.0f ;
575+ max_value = aot_load_const_from_table (
576+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
577+ }
578+ else {
579+ wasm_value .f32 = -1.0f ;
580+ min_value = aot_load_const_from_table (
581+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
582+ wasm_value .f32 = 18446744073709551616.0f ;
583+ max_value = aot_load_const_from_table (
584+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F32 );
585+ }
519586 }
587+ CHECK_LLVM_CONST (min_value );
588+ CHECK_LLVM_CONST (max_value );
520589
521590 if (!saturating )
522591 return trunc_float_to_int (
@@ -539,14 +608,37 @@ aot_compile_op_i64_trunc_f64(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
539608
540609 POP_F64 (value );
541610
542- if (sign ) {
543- min_value = F64_CONST (-9223372036854777856.0 );
544- max_value = F64_CONST (9223372036854775808.0 );
611+ if (!comp_ctx -> is_indirect_mode ) {
612+ if (sign ) {
613+ min_value = F64_CONST (-9223372036854777856.0 );
614+ max_value = F64_CONST (9223372036854775808.0 );
615+ }
616+ else {
617+ min_value = F64_CONST (-1.0 );
618+ max_value = F64_CONST (18446744073709551616.0 );
619+ }
545620 }
546621 else {
547- min_value = F64_CONST (-1.0 );
548- max_value = F64_CONST (18446744073709551616.0 );
622+ WASMValue wasm_value ;
623+ if (sign ) {
624+ wasm_value .f64 = -9223372036854777856.0 ;
625+ min_value = aot_load_const_from_table (
626+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
627+ wasm_value .f64 = 9223372036854775808.0 ;
628+ max_value = aot_load_const_from_table (
629+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
630+ }
631+ else {
632+ wasm_value .f64 = -1.0 ;
633+ min_value = aot_load_const_from_table (
634+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
635+ wasm_value .f64 = 18446744073709551616.0 ;
636+ max_value = aot_load_const_from_table (
637+ comp_ctx , func_ctx -> native_symbol , & wasm_value , VALUE_TYPE_F64 );
638+ }
549639 }
640+ CHECK_LLVM_CONST (min_value );
641+ CHECK_LLVM_CONST (max_value );
550642
551643 if (!saturating )
552644 return trunc_float_to_int (
0 commit comments