mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 22:34:27 +02:00
7169934: pow(x,y) or x64 computes incorrect result when x<0 and y is an odd integer
Bad test for parity of y in pow(x,y) (c1, interpreter) Reviewed-by: kvn, twisti
This commit is contained in:
parent
100eb2036d
commit
e975779565
1 changed files with 3 additions and 2 deletions
|
@ -6954,7 +6954,7 @@ void MacroAssembler::pow_or_exp(bool is_exp, int num_fpu_regs_in_use) {
|
||||||
tmp = rdx;
|
tmp = rdx;
|
||||||
}
|
}
|
||||||
Register tmp2 = rax;
|
Register tmp2 = rax;
|
||||||
NOT_LP64(Register tmp3 = rcx;)
|
Register tmp3 = rcx;
|
||||||
|
|
||||||
if (is_exp) {
|
if (is_exp) {
|
||||||
// Stack: X
|
// Stack: X
|
||||||
|
@ -7081,7 +7081,8 @@ void MacroAssembler::pow_or_exp(bool is_exp, int num_fpu_regs_in_use) {
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
Label integer;
|
Label integer;
|
||||||
shlq(tmp2, 1);
|
mov(tmp3, tmp2); // preserve tmp2 for parity check below
|
||||||
|
shlq(tmp3, 1);
|
||||||
jcc(Assembler::carryClear, integer);
|
jcc(Assembler::carryClear, integer);
|
||||||
jcc(Assembler::notZero, integer);
|
jcc(Assembler::notZero, integer);
|
||||||
stop("integer indefinite value shouldn't be seen here");
|
stop("integer indefinite value shouldn't be seen here");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue