Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/macroAssembler_x86.cpp @ 23943:d71d6679e879
Merge
author | asaha |
---|---|
date | Wed, 15 Jun 2016 14:21:31 -0700 |
parents | a96cf90239c6 f958bebdee26 |
children | f13e777eb255 e828a0e2a4bc |
comparison
equal
deleted
inserted
replaced
23927:bd1243bce4f5 | 23943:d71d6679e879 |
---|---|
3200 ffree(1); | 3200 ffree(1); |
3201 } | 3201 } |
3202 jmp(done); | 3202 jmp(done); |
3203 } else { | 3203 } else { |
3204 // Stack: X Y | 3204 // Stack: X Y |
3205 Label x_negative, y_odd; | 3205 Label x_negative, y_not_2; |
3206 | |
3207 static double two = 2.0; | |
3208 ExternalAddress two_addr((address)&two); | |
3209 | |
3210 // constant maybe too far on 64 bit | |
3211 lea(tmp2, two_addr); | |
3212 fld_d(Address(tmp2, 0)); // Stack: 2 X Y | |
3213 fcmp(tmp, 2, true, false); // Stack: X Y | |
3214 jcc(Assembler::parity, y_not_2); | |
3215 jcc(Assembler::notEqual, y_not_2); | |
3216 | |
3217 fxch(); fpop(); // Stack: X | |
3218 fmul(0); // Stack: X*X | |
3219 | |
3220 jmp(done); | |
3221 | |
3222 bind(y_not_2); | |
3206 | 3223 |
3207 fldz(); // Stack: 0 X Y | 3224 fldz(); // Stack: 0 X Y |
3208 fcmp(tmp, 1, true, false); // Stack: X Y | 3225 fcmp(tmp, 1, true, false); // Stack: X Y |
3209 jcc(Assembler::above, x_negative); | 3226 jcc(Assembler::above, x_negative); |
3210 | 3227 |