@@ -543,11 +543,18 @@ const char* xvm_intrinsic_get_ident(const xvm_intrinsic_id addr)
543
543
case INSC_ASIN : return "ASin" ;
544
544
case INSC_ACOS : return "ACos" ;
545
545
case INSC_ATAN : return "ATan" ;
546
+ case INSC_SINH : return "SinH" ;
547
+ case INSC_COSH : return "CosH" ;
548
+ case INSC_TANH : return "TanH" ;
549
+ case INSC_EXP : return "Exp" ;
550
+ case INSC_EXP2 : return "Exp2" ;
546
551
case INSC_POW : return "Pow" ;
547
552
case INSC_LOG : return "Log" ;
548
553
case INSC_LOG2 : return "Log2" ;
549
554
case INSC_LOG10 : return "Log10" ;
550
555
case INSC_SQRT : return "Sqrt" ;
556
+ case INSC_CEIL : return "Ceil" ;
557
+ case INSC_FLOOR : return "Floor" ;
551
558
552
559
/* --- Other intrinsics --- */
553
560
@@ -2539,6 +2546,51 @@ static void _xvm_call_intrinsic(unsigned int intrsc_id, xvm_stack* const stack,
2539
2546
}
2540
2547
break ;
2541
2548
2549
+ // float SinH(float x)
2550
+ case INSC_SINH :
2551
+ {
2552
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2553
+ float result = sinhf (INT_TO_FLT_REINTERPRET (arg0 ));
2554
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2555
+ }
2556
+ break ;
2557
+
2558
+ // float CosH(float x)
2559
+ case INSC_COSH :
2560
+ {
2561
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2562
+ float result = coshf (INT_TO_FLT_REINTERPRET (arg0 ));
2563
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2564
+ }
2565
+ break ;
2566
+
2567
+ // float TanH(float x)
2568
+ case INSC_TANH :
2569
+ {
2570
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2571
+ float result = tanhf (INT_TO_FLT_REINTERPRET (arg0 ));
2572
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2573
+ }
2574
+ break ;
2575
+
2576
+ // float Exp(float x)
2577
+ case INSC_EXP :
2578
+ {
2579
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2580
+ float result = expf (INT_TO_FLT_REINTERPRET (arg0 ));
2581
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2582
+ }
2583
+ break ;
2584
+
2585
+ // float Exp2(float x)
2586
+ case INSC_EXP2 :
2587
+ {
2588
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2589
+ float result = exp2f (INT_TO_FLT_REINTERPRET (arg0 ));
2590
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2591
+ }
2592
+ break ;
2593
+
2542
2594
// float Pow(float base, float exp)
2543
2595
case INSC_POW :
2544
2596
{
@@ -2585,6 +2637,24 @@ static void _xvm_call_intrinsic(unsigned int intrsc_id, xvm_stack* const stack,
2585
2637
}
2586
2638
break ;
2587
2639
2640
+ // float Ceil(float x)
2641
+ case INSC_CEIL :
2642
+ {
2643
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2644
+ float result = ceilf (INT_TO_FLT_REINTERPRET (arg0 ));
2645
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2646
+ }
2647
+ break ;
2648
+
2649
+ // float Floor(float x)
2650
+ case INSC_FLOOR :
2651
+ {
2652
+ int arg0 = _xvm_stack_pop (stack , reg_sp );
2653
+ float result = floorf (INT_TO_FLT_REINTERPRET (arg0 ));
2654
+ * reg_ar = FLT_TO_INT_REINTERPRET (result );
2655
+ }
2656
+ break ;
2657
+
2588
2658
/* --- Other intrinsics --- */
2589
2659
2590
2660
// int RandInt() -> In range [0 .. MAX_INT]
0 commit comments