Skip to content

Commit f56eb9a

Browse files
committed
Adopt JDK-8359435 AArch64: add support for SB instruction to MacroAssembler::spin_wait
1 parent 5f3c850 commit f56eb9a

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/asm/aarch64/AArch64Assembler.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.REVW;
138138
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.REVX;
139139
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.RORV;
140+
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.SB;
140141
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.SBC;
141142
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.SBCS;
142143
import static jdk.graal.compiler.asm.aarch64.AArch64Assembler.Instruction.SBFM;
@@ -1055,6 +1056,7 @@ public enum Instruction {
10551056
MSR(0xD5100000),
10561057
DC(0xD5087000),
10571058
ISB(0x000000C0),
1059+
SB(0x000000E0),
10581060

10591061
PACIA(0b00001 << 16 | 0b000000 << 10),
10601062
AUTIA(0b00001 << 16 | 0b000100 << 10),
@@ -4020,6 +4022,15 @@ public enum BarrierKind {
40204022
}
40214023
}
40224024

4025+
/**
4026+
* C6.2.75 Data Cache operation.
4027+
*/
4028+
public void dc(DataCacheOperationType type, Register src) {
4029+
assert verifyRegistersR(src);
4030+
4031+
emitInt(DC.encoding | type.encoding() | rt(src));
4032+
}
4033+
40234034
/**
40244035
* C6.2.80 Data Memory Barrier.
40254036
*
@@ -4068,12 +4079,10 @@ public void msr(SystemRegister systemRegister, Register src) {
40684079
}
40694080

40704081
/**
4071-
* C6.2.75 Data Cache operation.
4082+
* C6.2.230 Speculation barrier.
40724083
*/
4073-
public void dc(DataCacheOperationType type, Register src) {
4074-
assert verifyRegistersR(src);
4075-
4076-
emitInt(DC.encoding | type.encoding() | rt(src));
4084+
public void sb() {
4085+
emitInt(SB.encoding | BarrierOp);
40774086
}
40784087

40794088
public void annotatePatchingImmediate(int pos, Instruction instruction, int operandSizeBits, int offsetBits, int shift) {

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotLIRGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
import jdk.graal.compiler.asm.Label;
4242
import jdk.graal.compiler.asm.aarch64.AArch64Address;
43+
import jdk.graal.compiler.asm.aarch64.AArch64Assembler;
4344
import jdk.graal.compiler.asm.aarch64.AArch64Assembler.ConditionFlag;
4445
import jdk.graal.compiler.asm.aarch64.AArch64Assembler.PrefetchMode;
4546
import jdk.graal.compiler.asm.aarch64.AArch64MacroAssembler;
@@ -481,6 +482,7 @@ private Consumer<AArch64MacroAssembler> onSpinWaitInst() {
481482
case "nop" -> AArch64MacroAssembler::nop;
482483
case "isb" -> AArch64MacroAssembler::isb;
483484
case "yield" -> AArch64MacroAssembler::pause;
485+
case "sb" -> AArch64Assembler::sb;
484486
default -> throw GraalError.shouldNotReachHere("Unknown OnSpinWaitInst " + config.onSpinWaitInst);
485487
};
486488
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/lir/aarch64/AArch64SpinWaitOp.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
* Emits spin wait instruction(s).
3838
*/
3939
// @formatter:off
40-
@SyncPort(from = "https://github.com/openjdk/jdk/blob/98a93e115137a305aed6b7dbf1d4a7d5906fe77c/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp#L53-L69",
41-
sha1 = "92f81ed500658553a2ef2e7c48633094d95ba974")
40+
@SyncPort(from = "https://github.com/openjdk/jdk/blob/ecd2d83096a1fea7d5086736306770bcffa4fdb6/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp#L53-L74",
41+
sha1 = "6bd5ba27c0b3a8416ee5d8d495a55d86cfe1fad1")
4242
// @formatter:on
4343
@Opcode("SPIN_WAIT")
4444
public final class AArch64SpinWaitOp extends AArch64LIRInstruction {

0 commit comments

Comments
 (0)