@@ -689,7 +689,7 @@ void MacroAssembler::generate__kernel_rem_pio2(address two_over_pi, address pio2
689689 RECOMP_FOR1_CHECK;
690690 Register tmp2 = r1, n = r2, jv = r4, tmp5 = r5, jx = r6,
691691 tmp3 = r7, iqBase = r10, ih = r11, tmp4 = r12, tmp1 = r13,
692- jz = r14, j = r15, twoOverPiBase = r16, i = r17, qBase = r18 ;
692+ jz = r14, j = r15, twoOverPiBase = r16, i = r17, qBase = r19 ;
693693 // jp = jk == init_jk[prec] = init_jk[2] == {2,3,4,6}[2] == 4
694694 // jx = nx - 1
695695 lea (twoOverPiBase, ExternalAddress (two_over_pi));
@@ -1421,6 +1421,12 @@ void MacroAssembler::generate_dsin_dcos(bool isCos, address npio2_hw,
14211421 Label DONE, ARG_REDUCTION, TINY_X, RETURN_SIN, EARLY_CASE;
14221422 Register X = r0, absX = r1, n = r2, ix = r3;
14231423 FloatRegister y0 = v4, y1 = v5;
1424+
1425+ enter ();
1426+ // r19 is used in TemplateInterpreterGenerator::generate_math_entry
1427+ RegSet saved_regs = RegSet::of (r19);
1428+ push (saved_regs, sp);
1429+
14241430 block_comment (" check |x| ~< pi/4, NaN, Inf and |x| < 2**-27 cases" ); {
14251431 fmovd (X, v0);
14261432 mov (rscratch2, 0x3e400000 );
@@ -1438,14 +1444,14 @@ void MacroAssembler::generate_dsin_dcos(bool isCos, address npio2_hw,
14381444 // Set last bit unconditionally to make it NaN
14391445 orr (r10, r10, 1 );
14401446 fmovd (v0, r10);
1441- ret (lr );
1447+ b (DONE );
14421448 }
14431449 block_comment (" kernel_sin/kernel_cos: if(ix<0x3e400000) {<fast return>}" ); {
14441450 bind (TINY_X);
14451451 if (isCos) {
14461452 fmovd (v0, 1.0 );
14471453 }
1448- ret (lr );
1454+ b (DONE );
14491455 }
14501456 bind (ARG_REDUCTION); /* argument reduction needed */
14511457 block_comment (" n = __ieee754_rem_pio2(x,y);" ); {
@@ -1465,7 +1471,7 @@ void MacroAssembler::generate_dsin_dcos(bool isCos, address npio2_hw,
14651471 tbz (n, 1 , DONE);
14661472 }
14671473 fnegd (v0, v0);
1468- ret (lr );
1474+ b (DONE );
14691475 bind (RETURN_SIN);
14701476 generate_kernel_sin (y0, true , dsin_coef);
14711477 if (isCos) {
@@ -1474,7 +1480,7 @@ void MacroAssembler::generate_dsin_dcos(bool isCos, address npio2_hw,
14741480 tbz (n, 1 , DONE);
14751481 }
14761482 fnegd (v0, v0);
1477- ret (lr );
1483+ b (DONE );
14781484 }
14791485 bind (EARLY_CASE);
14801486 eor (y1, T8B, y1, y1);
@@ -1484,5 +1490,7 @@ void MacroAssembler::generate_dsin_dcos(bool isCos, address npio2_hw,
14841490 generate_kernel_sin (v0, false , dsin_coef);
14851491 }
14861492 bind (DONE);
1493+ pop (saved_regs, sp);
1494+ leave ();
14871495 ret (lr);
14881496}
0 commit comments