public final class AMD64ArrayEqualsOp extends AMD64LIRInstruction
LIRInstruction.Alive, LIRInstruction.Def, LIRInstruction.OperandFlag, LIRInstruction.OperandMode, LIRInstruction.State, LIRInstruction.Temp, LIRInstruction.Use
Modifier and Type | Field and Description |
---|---|
protected Value |
array1Value |
protected Value |
array2Value |
private int |
arrayBaseOffset |
private int |
arrayIndexScale |
private Kind |
kind |
protected Value |
lengthValue |
protected Value |
resultValue |
private static int |
SSE4_1_VECTOR_SIZE
|
protected Value |
temp1 |
protected Value |
temp2 |
protected Value |
temp3 |
protected Value |
temp4 |
static LIRInstructionClass<AMD64ArrayEqualsOp> |
TYPE |
private static int |
VECTOR_SIZE
|
protected Value |
vectorTemp1 |
protected Value |
vectorTemp2 |
ADDRESS_FLAGS, ALLOWED_FLAGS
Constructor and Description |
---|
AMD64ArrayEqualsOp(LIRGeneratorTool tool,
Kind kind,
Value result,
Value array1,
Value array2,
Value length) |
Modifier and Type | Method and Description |
---|---|
private void |
emit8ByteCompare(CompilationResultBuilder crb,
AMD64MacroAssembler masm,
Register result,
Register array1,
Register array2,
Register length,
Label trueLabel,
Label falseLabel)
Emits code that uses 8-byte vector compares.
|
void |
emitCode(CompilationResultBuilder crb,
AMD64MacroAssembler masm) |
private void |
emitSSE41Compare(CompilationResultBuilder crb,
AMD64MacroAssembler masm,
Register result,
Register array1,
Register array2,
Register length,
Label trueLabel,
Label falseLabel)
Emits code that uses SSE4.1 128-bit (16-byte) vector compares.
|
private void |
emitTailCompares(AMD64MacroAssembler masm,
Register result,
Register array1,
Register array2,
Register length,
Label trueLabel,
Label falseLabel)
Emits code to compare the remaining 1 to 4 bytes.
|
private static boolean |
supportsSSE41(TargetDescription target)
Returns if the underlying AMD64 architecture supports SSE 4.1 instructions.
|
emitCode
destroysCallerSavedRegisters, forEachAlive, forEachAlive, forEachInput, forEachInput, forEachOutput, forEachOutput, forEachRegisterHint, forEachRegisterHint, forEachState, forEachState, forEachState, forEachState, forEachTemp, forEachTemp, getLIRInstructionClass, hasOperands, hasState, id, name, setId, toString, toStringWithIdPrefix, verify, visitEachAlive, visitEachAlive, visitEachInput, visitEachInput, visitEachOutput, visitEachOutput, visitEachState, visitEachState, visitEachTemp, visitEachTemp
public static final LIRInstructionClass<AMD64ArrayEqualsOp> TYPE
private final int arrayBaseOffset
private final int arrayIndexScale
protected Value resultValue
protected Value array1Value
protected Value array2Value
protected Value lengthValue
protected Value vectorTemp1
protected Value vectorTemp2
private static final int SSE4_1_VECTOR_SIZE
private static final int VECTOR_SIZE
public AMD64ArrayEqualsOp(LIRGeneratorTool tool, Kind kind, Value result, Value array1, Value array2, Value length)
public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm)
emitCode
in class AMD64LIRInstruction
private static boolean supportsSSE41(TargetDescription target)
target
- target description of the underlying architectureprivate void emitSSE41Compare(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, Register array1, Register array2, Register length, Label trueLabel, Label falseLabel)
private void emit8ByteCompare(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register result, Register array1, Register array2, Register length, Label trueLabel, Label falseLabel)
private void emitTailCompares(AMD64MacroAssembler masm, Register result, Register array1, Register array2, Register length, Label trueLabel, Label falseLabel)