[15] RFR (S): x86: Fix Assembler::emit_operand asserts for XMM registers

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Mar 25 12:50:37 UTC 2020


http://cr.openjdk.java.net/~vlivanov/8241434/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8241434

Assembler::emit_operand() on x86 works with Registers, but is used to 
encode both GP registers (Register) and XMM registers (XMMRegisters).

It can cause problems since some asserts assume the arguments are 
Registers (e.g, assert(index != rsp)) and may fail when XMMRegister with 
the same encoding is passed.

The fix refactors operand encoding logic into 
Assembler::emit_operand_helper() which works with register encodings and 
it is called from overloaded Assembler::emit_operand() where proper 
asserts are put.

Also, as a cleanup, made Assembler::emit_operand32() and 
Assembler::emit_farith() available only on x86-32.

Testing: tier1-4

Thanks!

Best regards,
Vladimir Ivanov


More information about the hotspot-dev mailing list