diff options
author | Alexey Frunze <Alexey.Frunze@imgtec.com> | 2016-09-20 14:54:15 -0700 |
---|---|---|
committer | Alexey Frunze <Alexey.Frunze@imgtec.com> | 2016-10-20 15:03:43 -0700 |
commit | 674b9ee50c812d684a27a28cf09098195f068f3d (patch) | |
tree | 9b109adff71b48aa531628bf07644bccfc580fa3 /compiler/optimizing/code_generator_mips.h | |
parent | c6c5f6ce1c9cc44f859bbbc447478e4934be0fee (diff) |
MIPS32: Implement HSelect
Test: booted MIPS32R2 in QEMU
Test: test-art-target-run-test-optimizing (MIPS32R2) on CI20
Test: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU
Test: test-art-target-run-test-optimizing (MIPS32R6) in QEMU
Test: test-art-host-gtest
Change-Id: I8a8127d8d29cb5df84ed6f4fd4478f8d889e5cb7
Diffstat (limited to 'compiler/optimizing/code_generator_mips.h')
-rw-r--r-- | compiler/optimizing/code_generator_mips.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_mips.h b/compiler/optimizing/code_generator_mips.h index b8bd96a545..e132819c24 100644 --- a/compiler/optimizing/code_generator_mips.h +++ b/compiler/optimizing/code_generator_mips.h @@ -247,6 +247,12 @@ class InstructionCodeGeneratorMIPS : public InstructionCodeGenerator { Register obj, uint32_t offset); void GenerateIntCompare(IfCondition cond, LocationSummary* locations); + // When the function returns `false` it means that the condition holds if `dst` is non-zero + // and doesn't hold if `dst` is zero. If it returns `true`, the roles of zero and non-zero + // `dst` are exchanged. + bool MaterializeIntCompare(IfCondition cond, + LocationSummary* input_locations, + Register dst); void GenerateIntCompareAndBranch(IfCondition cond, LocationSummary* locations, MipsLabel* label); @@ -257,6 +263,22 @@ class InstructionCodeGeneratorMIPS : public InstructionCodeGenerator { bool gt_bias, Primitive::Type type, LocationSummary* locations); + // When the function returns `false` it means that the condition holds if the condition + // code flag `cc` is non-zero and doesn't hold if `cc` is zero. If it returns `true`, + // the roles of zero and non-zero values of the `cc` flag are exchanged. + bool MaterializeFpCompareR2(IfCondition cond, + bool gt_bias, + Primitive::Type type, + LocationSummary* input_locations, + int cc); + // When the function returns `false` it means that the condition holds if `dst` is non-zero + // and doesn't hold if `dst` is zero. If it returns `true`, the roles of zero and non-zero + // `dst` are exchanged. + bool MaterializeFpCompareR6(IfCondition cond, + bool gt_bias, + Primitive::Type type, + LocationSummary* input_locations, + FRegister dst); void GenerateFpCompareAndBranch(IfCondition cond, bool gt_bias, Primitive::Type type, @@ -283,6 +305,8 @@ class InstructionCodeGeneratorMIPS : public InstructionCodeGenerator { uint32_t num_entries, HBasicBlock* switch_block, HBasicBlock* default_block); + void GenConditionalMoveR2(HSelect* select); + void GenConditionalMoveR6(HSelect* select); MipsAssembler* const assembler_; CodeGeneratorMIPS* const codegen_; |