| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "test/unittests/compiler/instruction-selector-unittest.h" | 5 #include "test/unittests/compiler/instruction-selector-unittest.h" |
| 6 | 6 |
| 7 namespace v8 { | 7 namespace v8 { |
| 8 namespace internal { | 8 namespace internal { |
| 9 namespace compiler { | 9 namespace compiler { |
| 10 | 10 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 break; | 55 break; |
| 56 | 56 |
| 57 default: | 57 default: |
| 58 UNIMPLEMENTED(); | 58 UNIMPLEMENTED(); |
| 59 } | 59 } |
| 60 return NULL; | 60 return NULL; |
| 61 } | 61 } |
| 62 | 62 |
| 63 | 63 |
| 64 // ARM64 logical instructions. | 64 // ARM64 logical instructions. |
| 65 static const MachInst2 kLogicalInstructions[] = { | 65 const MachInst2 kLogicalInstructions[] = { |
| 66 {&RawMachineAssembler::Word32And, "Word32And", kArm64And32, kMachInt32}, | 66 {&RawMachineAssembler::Word32And, "Word32And", kArm64And32, kMachInt32}, |
| 67 {&RawMachineAssembler::Word64And, "Word64And", kArm64And, kMachInt64}, | 67 {&RawMachineAssembler::Word64And, "Word64And", kArm64And, kMachInt64}, |
| 68 {&RawMachineAssembler::Word32Or, "Word32Or", kArm64Or32, kMachInt32}, | 68 {&RawMachineAssembler::Word32Or, "Word32Or", kArm64Or32, kMachInt32}, |
| 69 {&RawMachineAssembler::Word64Or, "Word64Or", kArm64Or, kMachInt64}, | 69 {&RawMachineAssembler::Word64Or, "Word64Or", kArm64Or, kMachInt64}, |
| 70 {&RawMachineAssembler::Word32Xor, "Word32Xor", kArm64Eor32, kMachInt32}, | 70 {&RawMachineAssembler::Word32Xor, "Word32Xor", kArm64Eor32, kMachInt32}, |
| 71 {&RawMachineAssembler::Word64Xor, "Word64Xor", kArm64Eor, kMachInt64}}; | 71 {&RawMachineAssembler::Word64Xor, "Word64Xor", kArm64Eor, kMachInt64}}; |
| 72 | 72 |
| 73 | 73 |
| 74 // ARM64 logical immediates: contiguous set bits, rotated about a power of two | 74 // ARM64 logical immediates: contiguous set bits, rotated about a power of two |
| 75 // sized block. The block is then duplicated across the word. Below is a random | 75 // sized block. The block is then duplicated across the word. Below is a random |
| 76 // subset of the 32-bit immediates. | 76 // subset of the 32-bit immediates. |
| 77 static const uint32_t kLogical32Immediates[] = { | 77 const uint32_t kLogical32Immediates[] = { |
| 78 0x00000002, 0x00000003, 0x00000070, 0x00000080, 0x00000100, 0x000001c0, | 78 0x00000002, 0x00000003, 0x00000070, 0x00000080, 0x00000100, 0x000001c0, |
| 79 0x00000300, 0x000007e0, 0x00003ffc, 0x00007fc0, 0x0003c000, 0x0003f000, | 79 0x00000300, 0x000007e0, 0x00003ffc, 0x00007fc0, 0x0003c000, 0x0003f000, |
| 80 0x0003ffc0, 0x0003fff8, 0x0007ff00, 0x0007ffe0, 0x000e0000, 0x001e0000, | 80 0x0003ffc0, 0x0003fff8, 0x0007ff00, 0x0007ffe0, 0x000e0000, 0x001e0000, |
| 81 0x001ffffc, 0x003f0000, 0x003f8000, 0x00780000, 0x007fc000, 0x00ff0000, | 81 0x001ffffc, 0x003f0000, 0x003f8000, 0x00780000, 0x007fc000, 0x00ff0000, |
| 82 0x01800000, 0x01800180, 0x01f801f8, 0x03fe0000, 0x03ffffc0, 0x03fffffc, | 82 0x01800000, 0x01800180, 0x01f801f8, 0x03fe0000, 0x03ffffc0, 0x03fffffc, |
| 83 0x06000000, 0x07fc0000, 0x07ffc000, 0x07ffffc0, 0x07ffffe0, 0x0ffe0ffe, | 83 0x06000000, 0x07fc0000, 0x07ffc000, 0x07ffffc0, 0x07ffffe0, 0x0ffe0ffe, |
| 84 0x0ffff800, 0x0ffffff0, 0x0fffffff, 0x18001800, 0x1f001f00, 0x1f801f80, | 84 0x0ffff800, 0x0ffffff0, 0x0fffffff, 0x18001800, 0x1f001f00, 0x1f801f80, |
| 85 0x30303030, 0x3ff03ff0, 0x3ff83ff8, 0x3fff0000, 0x3fff8000, 0x3fffffc0, | 85 0x30303030, 0x3ff03ff0, 0x3ff83ff8, 0x3fff0000, 0x3fff8000, 0x3fffffc0, |
| 86 0x70007000, 0x7f7f7f7f, 0x7fc00000, 0x7fffffc0, 0x8000001f, 0x800001ff, | 86 0x70007000, 0x7f7f7f7f, 0x7fc00000, 0x7fffffc0, 0x8000001f, 0x800001ff, |
| 87 0x81818181, 0x9fff9fff, 0xc00007ff, 0xc0ffffff, 0xdddddddd, 0xe00001ff, | 87 0x81818181, 0x9fff9fff, 0xc00007ff, 0xc0ffffff, 0xdddddddd, 0xe00001ff, |
| 88 0xe00003ff, 0xe007ffff, 0xefffefff, 0xf000003f, 0xf001f001, 0xf3fff3ff, | 88 0xe00003ff, 0xe007ffff, 0xefffefff, 0xf000003f, 0xf001f001, 0xf3fff3ff, |
| 89 0xf800001f, 0xf80fffff, 0xf87ff87f, 0xfbfbfbfb, 0xfc00001f, 0xfc0000ff, | 89 0xf800001f, 0xf80fffff, 0xf87ff87f, 0xfbfbfbfb, 0xfc00001f, 0xfc0000ff, |
| 90 0xfc0001ff, 0xfc03fc03, 0xfe0001ff, 0xff000001, 0xff03ff03, 0xff800000, | 90 0xfc0001ff, 0xfc03fc03, 0xfe0001ff, 0xff000001, 0xff03ff03, 0xff800000, |
| 91 0xff800fff, 0xff801fff, 0xff87ffff, 0xffc0003f, 0xffc007ff, 0xffcfffcf, | 91 0xff800fff, 0xff801fff, 0xff87ffff, 0xffc0003f, 0xffc007ff, 0xffcfffcf, |
| 92 0xffe00003, 0xffe1ffff, 0xfff0001f, 0xfff07fff, 0xfff80007, 0xfff87fff, | 92 0xffe00003, 0xffe1ffff, 0xfff0001f, 0xfff07fff, 0xfff80007, 0xfff87fff, |
| 93 0xfffc00ff, 0xfffe07ff, 0xffff00ff, 0xffffc001, 0xfffff007, 0xfffff3ff, | 93 0xfffc00ff, 0xfffe07ff, 0xffff00ff, 0xffffc001, 0xfffff007, 0xfffff3ff, |
| 94 0xfffff807, 0xfffff9ff, 0xfffffc0f, 0xfffffeff}; | 94 0xfffff807, 0xfffff9ff, 0xfffffc0f, 0xfffffeff}; |
| 95 | 95 |
| 96 | 96 |
| 97 // Random subset of 64-bit logical immediates. | 97 // Random subset of 64-bit logical immediates. |
| 98 static const uint64_t kLogical64Immediates[] = { | 98 const uint64_t kLogical64Immediates[] = { |
| 99 0x0000000000000001, 0x0000000000000002, 0x0000000000000003, | 99 0x0000000000000001, 0x0000000000000002, 0x0000000000000003, |
| 100 0x0000000000000070, 0x0000000000000080, 0x0000000000000100, | 100 0x0000000000000070, 0x0000000000000080, 0x0000000000000100, |
| 101 0x00000000000001c0, 0x0000000000000300, 0x0000000000000600, | 101 0x00000000000001c0, 0x0000000000000300, 0x0000000000000600, |
| 102 0x00000000000007e0, 0x0000000000003ffc, 0x0000000000007fc0, | 102 0x00000000000007e0, 0x0000000000003ffc, 0x0000000000007fc0, |
| 103 0x0000000600000000, 0x0000003ffffffffc, 0x000000f000000000, | 103 0x0000000600000000, 0x0000003ffffffffc, 0x000000f000000000, |
| 104 0x000001f800000000, 0x0003fc0000000000, 0x0003fc000003fc00, | 104 0x000001f800000000, 0x0003fc0000000000, 0x0003fc000003fc00, |
| 105 0x0003ffffffc00000, 0x0003ffffffffffc0, 0x0006000000060000, | 105 0x0003ffffffc00000, 0x0003ffffffffffc0, 0x0006000000060000, |
| 106 0x003ffffffffc0000, 0x0180018001800180, 0x01f801f801f801f8, | 106 0x003ffffffffc0000, 0x0180018001800180, 0x01f801f801f801f8, |
| 107 0x0600000000000000, 0x1000000010000000, 0x1000100010001000, | 107 0x0600000000000000, 0x1000000010000000, 0x1000100010001000, |
| 108 0x1010101010101010, 0x1111111111111111, 0x1f001f001f001f00, | 108 0x1010101010101010, 0x1111111111111111, 0x1f001f001f001f00, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 124 MachInst2 mi; | 124 MachInst2 mi; |
| 125 ArchOpcode negate_arch_opcode; | 125 ArchOpcode negate_arch_opcode; |
| 126 }; | 126 }; |
| 127 | 127 |
| 128 | 128 |
| 129 std::ostream& operator<<(std::ostream& os, const AddSub& op) { | 129 std::ostream& operator<<(std::ostream& os, const AddSub& op) { |
| 130 return os << op.mi; | 130 return os << op.mi; |
| 131 } | 131 } |
| 132 | 132 |
| 133 | 133 |
| 134 static const AddSub kAddSubInstructions[] = { | 134 const AddSub kAddSubInstructions[] = { |
| 135 {{&RawMachineAssembler::Int32Add, "Int32Add", kArm64Add32, kMachInt32}, | 135 {{&RawMachineAssembler::Int32Add, "Int32Add", kArm64Add32, kMachInt32}, |
| 136 kArm64Sub32}, | 136 kArm64Sub32}, |
| 137 {{&RawMachineAssembler::Int64Add, "Int64Add", kArm64Add, kMachInt64}, | 137 {{&RawMachineAssembler::Int64Add, "Int64Add", kArm64Add, kMachInt64}, |
| 138 kArm64Sub}, | 138 kArm64Sub}, |
| 139 {{&RawMachineAssembler::Int32Sub, "Int32Sub", kArm64Sub32, kMachInt32}, | 139 {{&RawMachineAssembler::Int32Sub, "Int32Sub", kArm64Sub32, kMachInt32}, |
| 140 kArm64Add32}, | 140 kArm64Add32}, |
| 141 {{&RawMachineAssembler::Int64Sub, "Int64Sub", kArm64Sub, kMachInt64}, | 141 {{&RawMachineAssembler::Int64Sub, "Int64Sub", kArm64Sub, kMachInt64}, |
| 142 kArm64Add}}; | 142 kArm64Add}}; |
| 143 | 143 |
| 144 | 144 |
| 145 // ARM64 Add/Sub immediates: 12-bit immediate optionally shifted by 12. | 145 // ARM64 Add/Sub immediates: 12-bit immediate optionally shifted by 12. |
| 146 // Below is a combination of a random subset and some edge values. | 146 // Below is a combination of a random subset and some edge values. |
| 147 static const int32_t kAddSubImmediates[] = { | 147 const int32_t kAddSubImmediates[] = { |
| 148 0, 1, 69, 493, 599, 701, 719, | 148 0, 1, 69, 493, 599, 701, 719, |
| 149 768, 818, 842, 945, 1246, 1286, 1429, | 149 768, 818, 842, 945, 1246, 1286, 1429, |
| 150 1669, 2171, 2179, 2182, 2254, 2334, 2338, | 150 1669, 2171, 2179, 2182, 2254, 2334, 2338, |
| 151 2343, 2396, 2449, 2610, 2732, 2855, 2876, | 151 2343, 2396, 2449, 2610, 2732, 2855, 2876, |
| 152 2944, 3377, 3458, 3475, 3476, 3540, 3574, | 152 2944, 3377, 3458, 3475, 3476, 3540, 3574, |
| 153 3601, 3813, 3871, 3917, 4095, 4096, 16384, | 153 3601, 3813, 3871, 3917, 4095, 4096, 16384, |
| 154 364544, 462848, 970752, 1523712, 1863680, 2363392, 3219456, | 154 364544, 462848, 970752, 1523712, 1863680, 2363392, 3219456, |
| 155 3280896, 4247552, 4526080, 4575232, 4960256, 5505024, 5894144, | 155 3280896, 4247552, 4526080, 4575232, 4960256, 5505024, 5894144, |
| 156 6004736, 6193152, 6385664, 6795264, 7114752, 7233536, 7348224, | 156 6004736, 6193152, 6385664, 6795264, 7114752, 7233536, 7348224, |
| 157 7499776, 7573504, 7729152, 8634368, 8937472, 9465856, 10354688, | 157 7499776, 7573504, 7729152, 8634368, 8937472, 9465856, 10354688, |
| 158 10682368, 11059200, 11460608, 13168640, 13176832, 14336000, 15028224, | 158 10682368, 11059200, 11460608, 13168640, 13176832, 14336000, 15028224, |
| 159 15597568, 15892480, 16773120}; | 159 15597568, 15892480, 16773120}; |
| 160 | 160 |
| 161 | 161 |
| 162 // ARM64 flag setting data processing instructions. | 162 // ARM64 flag setting data processing instructions. |
| 163 static const MachInst2 kDPFlagSetInstructions[] = { | 163 const MachInst2 kDPFlagSetInstructions[] = { |
| 164 {&RawMachineAssembler::Word32And, "Word32And", kArm64Tst32, kMachInt32}, | 164 {&RawMachineAssembler::Word32And, "Word32And", kArm64Tst32, kMachInt32}, |
| 165 {&RawMachineAssembler::Int32Add, "Int32Add", kArm64Cmn32, kMachInt32}, | 165 {&RawMachineAssembler::Int32Add, "Int32Add", kArm64Cmn32, kMachInt32}, |
| 166 {&RawMachineAssembler::Int32Sub, "Int32Sub", kArm64Cmp32, kMachInt32}, | 166 {&RawMachineAssembler::Int32Sub, "Int32Sub", kArm64Cmp32, kMachInt32}, |
| 167 {&RawMachineAssembler::Word64And, "Word64And", kArm64Tst, kMachInt64}}; | 167 {&RawMachineAssembler::Word64And, "Word64And", kArm64Tst, kMachInt64}}; |
| 168 | 168 |
| 169 | 169 |
| 170 // ARM64 arithmetic with overflow instructions. | 170 // ARM64 arithmetic with overflow instructions. |
| 171 static const MachInst2 kOvfAddSubInstructions[] = { | 171 const MachInst2 kOvfAddSubInstructions[] = { |
| 172 {&RawMachineAssembler::Int32AddWithOverflow, "Int32AddWithOverflow", | 172 {&RawMachineAssembler::Int32AddWithOverflow, "Int32AddWithOverflow", |
| 173 kArm64Add32, kMachInt32}, | 173 kArm64Add32, kMachInt32}, |
| 174 {&RawMachineAssembler::Int32SubWithOverflow, "Int32SubWithOverflow", | 174 {&RawMachineAssembler::Int32SubWithOverflow, "Int32SubWithOverflow", |
| 175 kArm64Sub32, kMachInt32}}; | 175 kArm64Sub32, kMachInt32}}; |
| 176 | 176 |
| 177 | 177 |
| 178 // ARM64 shift instructions. | 178 // ARM64 shift instructions. |
| 179 static const Shift kShiftInstructions[] = { | 179 const Shift kShiftInstructions[] = { |
| 180 {{&RawMachineAssembler::Word32Shl, "Word32Shl", kArm64Lsl32, kMachInt32}, | 180 {{&RawMachineAssembler::Word32Shl, "Word32Shl", kArm64Lsl32, kMachInt32}, |
| 181 kMode_Operand2_R_LSL_I}, | 181 kMode_Operand2_R_LSL_I}, |
| 182 {{&RawMachineAssembler::Word64Shl, "Word64Shl", kArm64Lsl, kMachInt64}, | 182 {{&RawMachineAssembler::Word64Shl, "Word64Shl", kArm64Lsl, kMachInt64}, |
| 183 kMode_Operand2_R_LSL_I}, | 183 kMode_Operand2_R_LSL_I}, |
| 184 {{&RawMachineAssembler::Word32Shr, "Word32Shr", kArm64Lsr32, kMachInt32}, | 184 {{&RawMachineAssembler::Word32Shr, "Word32Shr", kArm64Lsr32, kMachInt32}, |
| 185 kMode_Operand2_R_LSR_I}, | 185 kMode_Operand2_R_LSR_I}, |
| 186 {{&RawMachineAssembler::Word64Shr, "Word64Shr", kArm64Lsr, kMachInt64}, | 186 {{&RawMachineAssembler::Word64Shr, "Word64Shr", kArm64Lsr, kMachInt64}, |
| 187 kMode_Operand2_R_LSR_I}, | 187 kMode_Operand2_R_LSR_I}, |
| 188 {{&RawMachineAssembler::Word32Sar, "Word32Sar", kArm64Asr32, kMachInt32}, | 188 {{&RawMachineAssembler::Word32Sar, "Word32Sar", kArm64Asr32, kMachInt32}, |
| 189 kMode_Operand2_R_ASR_I}, | 189 kMode_Operand2_R_ASR_I}, |
| 190 {{&RawMachineAssembler::Word64Sar, "Word64Sar", kArm64Asr, kMachInt64}, | 190 {{&RawMachineAssembler::Word64Sar, "Word64Sar", kArm64Asr, kMachInt64}, |
| 191 kMode_Operand2_R_ASR_I}, | 191 kMode_Operand2_R_ASR_I}, |
| 192 {{&RawMachineAssembler::Word32Ror, "Word32Ror", kArm64Ror32, kMachInt32}, | 192 {{&RawMachineAssembler::Word32Ror, "Word32Ror", kArm64Ror32, kMachInt32}, |
| 193 kMode_Operand2_R_ROR_I}, | 193 kMode_Operand2_R_ROR_I}, |
| 194 {{&RawMachineAssembler::Word64Ror, "Word64Ror", kArm64Ror, kMachInt64}, | 194 {{&RawMachineAssembler::Word64Ror, "Word64Ror", kArm64Ror, kMachInt64}, |
| 195 kMode_Operand2_R_ROR_I}}; | 195 kMode_Operand2_R_ROR_I}}; |
| 196 | 196 |
| 197 | 197 |
| 198 // ARM64 Mul/Div instructions. | 198 // ARM64 Mul/Div instructions. |
| 199 static const MachInst2 kMulDivInstructions[] = { | 199 const MachInst2 kMulDivInstructions[] = { |
| 200 {&RawMachineAssembler::Int32Mul, "Int32Mul", kArm64Mul32, kMachInt32}, | 200 {&RawMachineAssembler::Int32Mul, "Int32Mul", kArm64Mul32, kMachInt32}, |
| 201 {&RawMachineAssembler::Int64Mul, "Int64Mul", kArm64Mul, kMachInt64}, | 201 {&RawMachineAssembler::Int64Mul, "Int64Mul", kArm64Mul, kMachInt64}, |
| 202 {&RawMachineAssembler::Int32Div, "Int32Div", kArm64Idiv32, kMachInt32}, | 202 {&RawMachineAssembler::Int32Div, "Int32Div", kArm64Idiv32, kMachInt32}, |
| 203 {&RawMachineAssembler::Int64Div, "Int64Div", kArm64Idiv, kMachInt64}, | 203 {&RawMachineAssembler::Int64Div, "Int64Div", kArm64Idiv, kMachInt64}, |
| 204 {&RawMachineAssembler::Uint32Div, "Uint32Div", kArm64Udiv32, kMachInt32}, | 204 {&RawMachineAssembler::Uint32Div, "Uint32Div", kArm64Udiv32, kMachInt32}, |
| 205 {&RawMachineAssembler::Uint64Div, "Uint64Div", kArm64Udiv, kMachInt64}}; | 205 {&RawMachineAssembler::Uint64Div, "Uint64Div", kArm64Udiv, kMachInt64}}; |
| 206 | 206 |
| 207 | 207 |
| 208 // ARM64 FP arithmetic instructions. | 208 // ARM64 FP arithmetic instructions. |
| 209 static const MachInst2 kFPArithInstructions[] = { | 209 const MachInst2 kFPArithInstructions[] = { |
| 210 {&RawMachineAssembler::Float64Add, "Float64Add", kArm64Float64Add, | 210 {&RawMachineAssembler::Float64Add, "Float64Add", kArm64Float64Add, |
| 211 kMachFloat64}, | 211 kMachFloat64}, |
| 212 {&RawMachineAssembler::Float64Sub, "Float64Sub", kArm64Float64Sub, | 212 {&RawMachineAssembler::Float64Sub, "Float64Sub", kArm64Float64Sub, |
| 213 kMachFloat64}, | 213 kMachFloat64}, |
| 214 {&RawMachineAssembler::Float64Mul, "Float64Mul", kArm64Float64Mul, | 214 {&RawMachineAssembler::Float64Mul, "Float64Mul", kArm64Float64Mul, |
| 215 kMachFloat64}, | 215 kMachFloat64}, |
| 216 {&RawMachineAssembler::Float64Div, "Float64Div", kArm64Float64Div, | 216 {&RawMachineAssembler::Float64Div, "Float64Div", kArm64Float64Div, |
| 217 kMachFloat64}}; | 217 kMachFloat64}}; |
| 218 | 218 |
| 219 | 219 |
| 220 struct FPCmp { | 220 struct FPCmp { |
| 221 MachInst2 mi; | 221 MachInst2 mi; |
| 222 FlagsCondition cond; | 222 FlagsCondition cond; |
| 223 }; | 223 }; |
| 224 | 224 |
| 225 | 225 |
| 226 std::ostream& operator<<(std::ostream& os, const FPCmp& cmp) { | 226 std::ostream& operator<<(std::ostream& os, const FPCmp& cmp) { |
| 227 return os << cmp.mi; | 227 return os << cmp.mi; |
| 228 } | 228 } |
| 229 | 229 |
| 230 | 230 |
| 231 // ARM64 FP comparison instructions. | 231 // ARM64 FP comparison instructions. |
| 232 static const FPCmp kFPCmpInstructions[] = { | 232 const FPCmp kFPCmpInstructions[] = { |
| 233 {{&RawMachineAssembler::Float64Equal, "Float64Equal", kArm64Float64Cmp, | 233 {{&RawMachineAssembler::Float64Equal, "Float64Equal", kArm64Float64Cmp, |
| 234 kMachFloat64}, | 234 kMachFloat64}, |
| 235 kUnorderedEqual}, | 235 kEqual}, |
| 236 {{&RawMachineAssembler::Float64LessThan, "Float64LessThan", | 236 {{&RawMachineAssembler::Float64LessThan, "Float64LessThan", |
| 237 kArm64Float64Cmp, kMachFloat64}, | 237 kArm64Float64Cmp, kMachFloat64}, |
| 238 kUnorderedLessThan}, | 238 kUnsignedLessThan}, |
| 239 {{&RawMachineAssembler::Float64LessThanOrEqual, "Float64LessThanOrEqual", | 239 {{&RawMachineAssembler::Float64LessThanOrEqual, "Float64LessThanOrEqual", |
| 240 kArm64Float64Cmp, kMachFloat64}, | 240 kArm64Float64Cmp, kMachFloat64}, |
| 241 kUnorderedLessThanOrEqual}}; | 241 kUnsignedLessThanOrEqual}}; |
| 242 | 242 |
| 243 | 243 |
| 244 struct Conversion { | 244 struct Conversion { |
| 245 // The machine_type field in MachInst1 represents the destination type. | 245 // The machine_type field in MachInst1 represents the destination type. |
| 246 MachInst1 mi; | 246 MachInst1 mi; |
| 247 MachineType src_machine_type; | 247 MachineType src_machine_type; |
| 248 }; | 248 }; |
| 249 | 249 |
| 250 | 250 |
| 251 std::ostream& operator<<(std::ostream& os, const Conversion& conv) { | 251 std::ostream& operator<<(std::ostream& os, const Conversion& conv) { |
| 252 return os << conv.mi; | 252 return os << conv.mi; |
| 253 } | 253 } |
| 254 | 254 |
| 255 | 255 |
| 256 // ARM64 type conversion instructions. | 256 // ARM64 type conversion instructions. |
| 257 static const Conversion kConversionInstructions[] = { | 257 const Conversion kConversionInstructions[] = { |
| 258 {{&RawMachineAssembler::ChangeFloat32ToFloat64, "ChangeFloat32ToFloat64", | 258 {{&RawMachineAssembler::ChangeFloat32ToFloat64, "ChangeFloat32ToFloat64", |
| 259 kArm64Float32ToFloat64, kMachFloat64}, | 259 kArm64Float32ToFloat64, kMachFloat64}, |
| 260 kMachFloat32}, | 260 kMachFloat32}, |
| 261 {{&RawMachineAssembler::TruncateFloat64ToFloat32, | 261 {{&RawMachineAssembler::TruncateFloat64ToFloat32, |
| 262 "TruncateFloat64ToFloat32", kArm64Float64ToFloat32, kMachFloat32}, | 262 "TruncateFloat64ToFloat32", kArm64Float64ToFloat32, kMachFloat32}, |
| 263 kMachFloat64}, | 263 kMachFloat64}, |
| 264 {{&RawMachineAssembler::ChangeInt32ToInt64, "ChangeInt32ToInt64", | 264 {{&RawMachineAssembler::ChangeInt32ToInt64, "ChangeInt32ToInt64", |
| 265 kArm64Sxtw, kMachInt64}, | 265 kArm64Sxtw, kMachInt64}, |
| 266 kMachInt32}, | 266 kMachInt32}, |
| 267 {{&RawMachineAssembler::ChangeUint32ToUint64, "ChangeUint32ToUint64", | 267 {{&RawMachineAssembler::ChangeUint32ToUint64, "ChangeUint32ToUint64", |
| (...skipping 1899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2167 ASSERT_EQ(1U, s[0]->InputCount()); | 2167 ASSERT_EQ(1U, s[0]->InputCount()); |
| 2168 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); | 2168 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
| 2169 ASSERT_EQ(1U, s[0]->OutputCount()); | 2169 ASSERT_EQ(1U, s[0]->OutputCount()); |
| 2170 EXPECT_EQ(s.ToVreg(r), s.ToVreg(s[0]->Output())); | 2170 EXPECT_EQ(s.ToVreg(r), s.ToVreg(s[0]->Output())); |
| 2171 } | 2171 } |
| 2172 } | 2172 } |
| 2173 | 2173 |
| 2174 } // namespace compiler | 2174 } // namespace compiler |
| 2175 } // namespace internal | 2175 } // namespace internal |
| 2176 } // namespace v8 | 2176 } // namespace v8 |
| OLD | NEW |