[cleanup] Change scratch to temp simd register
This requires a change to instruction selector to UseUnique so that it does not shadow the temporary register. Bug: v8:9810 Change-Id: I3da3e18fbbcc1dd8d40821a6c2453fd2d975ad15 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1849981 Reviewed-by: Deepti Gandluri <gdeepti@chromium.org> Commit-Queue: Zhi An Ng <zhin@chromium.org> Cr-Commit-Position: refs/heads/master@{#64203}
This commit is contained in:
parent
c75b543ddb
commit
9c17b66281
@ -479,17 +479,18 @@ class OutOfLineRecordWrite final : public OutOfLineCode {
|
||||
__ opcode(i.OutputSimd128Register(), i.InputOperand(1), imm); \
|
||||
}
|
||||
|
||||
#define ASSEMBLE_SIMD_ALL_TRUE(opcode) \
|
||||
do { \
|
||||
Register dst = i.OutputRegister(); \
|
||||
Operand src = i.InputOperand(0); \
|
||||
Register tmp = i.TempRegister(0); \
|
||||
__ mov(tmp, Immediate(1)); \
|
||||
__ xor_(dst, dst); \
|
||||
__ Pxor(kScratchDoubleReg, kScratchDoubleReg); \
|
||||
__ opcode(kScratchDoubleReg, src); \
|
||||
__ Ptest(kScratchDoubleReg, kScratchDoubleReg); \
|
||||
__ cmov(zero, dst, tmp); \
|
||||
#define ASSEMBLE_SIMD_ALL_TRUE(opcode) \
|
||||
do { \
|
||||
Register dst = i.OutputRegister(); \
|
||||
Operand src = i.InputOperand(0); \
|
||||
Register tmp = i.TempRegister(0); \
|
||||
XMMRegister tmp_simd = i.TempSimd128Register(1); \
|
||||
__ mov(tmp, Immediate(1)); \
|
||||
__ xor_(dst, dst); \
|
||||
__ Pxor(tmp_simd, tmp_simd); \
|
||||
__ opcode(tmp_simd, src); \
|
||||
__ Ptest(tmp_simd, tmp_simd); \
|
||||
__ cmov(zero, dst, tmp); \
|
||||
} while (false)
|
||||
|
||||
void CodeGenerator::AssembleDeconstructFrame() {
|
||||
|
@ -2212,12 +2212,12 @@ SIMD_ANYTRUE_LIST(VISIT_SIMD_ANYTRUE)
|
||||
#undef VISIT_SIMD_ANYTRUE
|
||||
#undef SIMD_ANYTRUE_LIST
|
||||
|
||||
#define VISIT_SIMD_ALLTRUE(Opcode) \
|
||||
void InstructionSelector::Visit##Opcode(Node* node) { \
|
||||
IA32OperandGenerator g(this); \
|
||||
InstructionOperand temps[] = {g.TempRegister()}; \
|
||||
Emit(kIA32##Opcode, g.DefineAsRegister(node), g.Use(node->InputAt(0)), \
|
||||
arraysize(temps), temps); \
|
||||
#define VISIT_SIMD_ALLTRUE(Opcode) \
|
||||
void InstructionSelector::Visit##Opcode(Node* node) { \
|
||||
IA32OperandGenerator g(this); \
|
||||
InstructionOperand temps[] = {g.TempRegister(), g.TempSimd128Register()}; \
|
||||
Emit(kIA32##Opcode, g.DefineAsRegister(node), \
|
||||
g.UseUnique(node->InputAt(0)), arraysize(temps), temps); \
|
||||
}
|
||||
SIMD_ALLTRUE_LIST(VISIT_SIMD_ALLTRUE)
|
||||
#undef VISIT_SIMD_ALLTRUE
|
||||
|
Loading…
Reference in New Issue
Block a user