Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: src/arm/assembler-thumb.cc

Issue 24793002: Thumb2 Backend: Make arithmetic instructions set condition codes by default Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/arm/assembler-arm-inl.h ('k') | src/arm/assembler-thumb32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 18 matching lines...) Expand all
29 29
30 #if defined(V8_TARGET_ARCH_ARM) 30 #if defined(V8_TARGET_ARCH_ARM)
31 31
32 #include "arm/assembler-arm-inl.h" 32 #include "arm/assembler-arm-inl.h"
33 #include "serialize.h" 33 #include "serialize.h"
34 34
35 namespace v8 { 35 namespace v8 {
36 namespace internal { 36 namespace internal {
37 37
38 void Assembler::add_thumb(Register dst, Register src1, const Operand& src2, 38 void Assembler::add_thumb(Register dst, Register src1, const Operand& src2,
39 SBit s, Condition cond) { 39 SBitMode smode, Condition cond) {
40 ASSERT(cond == al); 40 bool is_in_it_block = emit_it(cond);
41 SBit s = sbit_from_mode(smode);
41 if (!src2.rm_.is_valid()) { 42 if (!src2.rm_.is_valid()) {
42 // Immediate. 43 // Immediate.
43 if (s == LeaveCC) { 44 if (it_block_smode_check(is_in_it_block, smode)) {
44 if (is_uint12(src2.imm32_)) {
45 add_imm_t4(dst, src1, src2, s, cond);
46 return;
47 }
48 } else {
49 if (is_uint3(src2.imm32_) && are_low_reg(dst, src1)) { 45 if (is_uint3(src2.imm32_) && are_low_reg(dst, src1)) {
50 emit16(thumb16_mode1(ADD_IMM_1) | 46 emit16(thumb16_mode1(ADD_IMM_1) |
51 thumb16_2lowreg_imm3_encoding(dst, src1, src2)); 47 thumb16_2lowreg_imm3_encoding(dst, src1, src2));
52 return; 48 return;
53 } else if (is_uint8(src2.imm32_) && dst.code() == src1.code()) { 49 } else if (is_low_reg(dst) &&
50 dst.code() == src1.code() &&
51 is_uint8(src2.imm32_)) {
54 emit16(thumb16_mode1(ADD_IMM_2) | 52 emit16(thumb16_mode1(ADD_IMM_2) |
55 thumb16_lowreg_imm8_encoding(dst, src2)); 53 thumb16_lowreg_imm8_encoding(dst, src2));
56 return; 54 return;
57 } 55 }
58 } 56 }
57 if (smode != SetCC && is_uint12(src2.imm32_)) {
58 add_imm_t4(dst, src1, src2, s, cond);
59 return;
60 }
59 uint32_t i, imm3, imm8; 61 uint32_t i, imm3, imm8;
60 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 62 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
61 add_imm_t3(dst, src1, s, cond, i, imm3, imm8); 63 add_imm_t3(dst, src1, s, cond, i, imm3, imm8);
62 return; 64 return;
63 } 65 }
64 // Immediate - too big for 1 thumb instruction 66 // Immediate - too big for 1 thumb instruction
65 mov_thumb(ip, src2, LeaveCC, al); 67 mov_thumb(ip, src2, LeaveCC, al);
66 add_thumb(dst, src1, Operand(ip), s, al); 68 add_thumb(dst, src1, Operand(ip), smode, al);
67 return; 69 return;
68 } else if (src2.shift_imm_ == 0) { 70 } else if (src2.shift_imm_ == 0) {
69 // Register. 71 // Register.
70 if (s == SetCC && are_low_reg(dst, src1) && is_low_reg(src2.rm_)) { 72 if (it_block_smode_check(is_in_it_block, smode) &&
73 are_low_reg(dst, src1) &&
74 is_low_reg(src2.rm_)) {
71 emit16(thumb16_mode1(ADD_REG_1) | 75 emit16(thumb16_mode1(ADD_REG_1) |
72 thumb16_3lowreg_encoding(dst, src1, src2)); 76 thumb16_3lowreg_encoding(dst, src1, src2));
73 return; 77 return;
74 } else if (s == LeaveCC && dst.code() == src1.code()) { 78 } else if (smode != SetCC && dst.code() == src1.code()) {
75 emit16(thumb16_mode3(ADD_REG_2) | 79 emit16(thumb16_mode3(ADD_REG_2) |
76 thumb16_2anyreg_encoding(dst, src2)); 80 thumb16_2anyreg_encoding(dst, src2));
77 return; 81 return;
78 } 82 }
79 } 83 }
80 add_reg_t3(dst, src1, src2, s, cond); 84 add_reg_t3(dst, src1, src2, s, cond);
81 } 85 }
82 86
83 87
84 void Assembler::sub_thumb(Register dst, Register src1, const Operand& src2, 88 void Assembler::sub_thumb(Register dst, Register src1, const Operand& src2,
85 SBit s, Condition cond) { 89 SBitMode smode, Condition cond) {
86 emit_it(cond); 90 bool is_in_it_block = emit_it(cond);
91 SBit s = sbit_from_mode(smode);
87 if (!src2.rm_.is_valid()) { 92 if (!src2.rm_.is_valid()) {
88 // Immediate. 93 // Immediate.
89 if (s == LeaveCC) { 94 if (it_block_smode_check(is_in_it_block, smode)) {
90 if (is_uint12(src2.imm32_)) {
91 sub_imm_t4(dst, src1, src2, s, cond);
92 return;
93 }
94 } else {
95 if (is_uint3(src2.imm32_) && are_low_reg(dst, src1)) { 95 if (is_uint3(src2.imm32_) && are_low_reg(dst, src1)) {
96 emit16(thumb16_mode1(SUB_IMM_1) | 96 emit16(thumb16_mode1(SUB_IMM_1) |
97 thumb16_2lowreg_imm3_encoding(dst, src1, src2)); 97 thumb16_2lowreg_imm3_encoding(dst, src1, src2));
98 return; 98 return;
99 } else if (is_uint8(src2.imm32_) && dst.code() == src1.code()) { 99 } else if (is_low_reg(dst) &&
100 dst.code() == src1.code() &&
101 is_uint8(src2.imm32_)) {
100 emit16(thumb16_mode1(SUB_IMM_2) | 102 emit16(thumb16_mode1(SUB_IMM_2) |
101 thumb16_lowreg_imm8_encoding(dst, src2)); 103 thumb16_lowreg_imm8_encoding(dst, src2));
102 return; 104 return;
103 } 105 }
104 } 106 }
107 if (smode != SetCC && is_uint12(src2.imm32_)) {
108 sub_imm_t4(dst, src1, src2, s, cond);
109 return;
110 }
105 uint32_t i, imm3, imm8; 111 uint32_t i, imm3, imm8;
106 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 112 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
107 sub_imm_t3(dst, src1, s, cond, i, imm3, imm8); 113 sub_imm_t3(dst, src1, s, cond, i, imm3, imm8);
108 return; 114 return;
109 } 115 }
110 ASSERT(cond == al); 116 ASSERT(cond == al);
111 mov_thumb(ip, src2, LeaveCC, al); 117 mov_thumb(ip, src2, LeaveCC, al);
112 sub_thumb(dst, src1, Operand(ip), s, al); 118 sub_thumb(dst, src1, Operand(ip), smode, al);
113 return; 119 return;
114 } else { 120 } else {
115 // Register. 121 // Register.
116 if (s == SetCC && are_low_reg(dst, src1) && is_low_reg(src2.rm_)) { 122 if (it_block_smode_check(is_in_it_block, smode) &&
123 are_low_reg(dst, src1) &&
124 is_low_reg(src2.rm_)) {
117 emit16(thumb16_mode1(SUB_REG) | 125 emit16(thumb16_mode1(SUB_REG) |
118 thumb16_3lowreg_encoding(dst, src1, src2)); 126 thumb16_3lowreg_encoding(dst, src1, src2));
119 return; 127 return;
120 } else { 128 } else {
121 sub_reg_t3(dst, src1, src2, s, cond); 129 sub_reg_t3(dst, src1, src2, s, cond);
122 return; 130 return;
123 } 131 }
124 } 132 }
125 UNREACHABLE(); 133 UNREACHABLE();
126 } 134 }
127 135
128 136
129 void Assembler::mov_thumb(Register dst, const Operand& src, SBit s, 137 void Assembler::mov_thumb(Register dst, const Operand& src, SBitMode smode,
130 Condition cond) { 138 Condition cond) {
131 emit_it(cond); 139 bool is_in_it_block = emit_it(cond);
140 SBit s = sbit_from_mode(smode);
132 if (!src.rm_.is_valid()) { 141 if (!src.rm_.is_valid()) {
133 // Immediate. 142 // Immediate.
134 if (is_uint8(src.imm32_) && is_low_reg(dst) && s == SetCC) { 143 if (it_block_smode_check(is_in_it_block, smode) &&
144 is_uint8(src.imm32_) &&
145 is_low_reg(dst)) {
135 emit16(thumb16_mode1(MOV_IMM) | 146 emit16(thumb16_mode1(MOV_IMM) |
136 thumb16_lowreg_imm8_encoding(dst, src)); 147 thumb16_lowreg_imm8_encoding(dst, src));
137 return; 148 return;
138 } else { 149 } else {
139 if (is_uint16(src.imm32_) && s == LeaveCC) { 150 if (is_uint16(src.imm32_) && smode != SetCC) {
140 mov_imm_t3(dst, src, s, cond); 151 mov_imm_t3(dst, src, s, cond);
141 return; 152 return;
142 } else { 153 } else {
143 uint32_t i, imm3, imm8; 154 uint32_t i, imm3, imm8;
144 if (thumb_expand_imm(src.imm32_, &i, &imm3, &imm8) && 155 if (thumb_expand_imm(src.imm32_, &i, &imm3, &imm8) &&
145 !src.must_output_reloc_info(this)) { 156 !src.must_output_reloc_info(this)) {
146 mov_imm_t2(dst, s, cond, i, imm3, imm8); 157 mov_imm_t2(dst, s, cond, i, imm3, imm8);
147 return; 158 return;
148 } else { 159 } else {
149 move_32_bit_immediate_thumb(dst, s, src, cond); 160 move_32_bit_immediate_thumb(dst, smode, src, cond);
150 return; 161 return;
151 } 162 }
152 } 163 }
153 } 164 }
154 } else { 165 } else {
155 // Register. 166 // Register.
156 if (src.rs_.is_valid() || (!src.rs_.is_valid() && src.shift_imm_ != 0)) { 167 if (src.rs_.is_valid() || (!src.rs_.is_valid() && src.shift_imm_ != 0)) {
157 switch (src.shift_op_) { 168 switch (src.shift_op_) {
158 case LSL: lsl_thumb(dst, src, s, cond); 169 case LSL: lsl_thumb(dst, src, smode, cond);
159 return; 170 return;
160 case LSR: lsr_thumb(dst, src, s, cond); 171 case LSR: lsr_thumb(dst, src, smode, cond);
161 return; 172 return;
162 case ASR: asr_thumb(dst, src, s, cond); 173 case ASR: asr_thumb(dst, src, smode, cond, is_in_it_block);
163 return; 174 return;
164 case ROR: ror_thumb(dst, src, s, cond); 175 case ROR: ror_thumb(dst, src, smode, cond);
165 return; 176 return;
166 case RRX: 177 case RRX:
167 default: UNREACHABLE(); 178 default: UNREACHABLE();
168 } 179 }
169 return; 180 return;
170 } 181 }
171 if (s == LeaveCC) { 182 if (smode != SetCC) {
172 emit16(thumb16_mode3(MOV_REG_1) | 183 emit16(thumb16_mode3(MOV_REG_1) |
173 thumb16_2anyreg_encoding(dst, src)); 184 thumb16_2anyreg_encoding(dst, src));
174 return; 185 return;
175 } else if (are_low_reg(dst, src.rm_)) { 186 } else if (smode != LeaveCC && !is_in_it_block &&
187 are_low_reg(dst, src.rm_)) {
176 // Note: MOV_REG_2 is 0, so call not needed 188 // Note: MOV_REG_2 is 0, so call not needed
177 emit16(thumb16_2lowreg_encoding(dst, src)); 189 emit16(thumb16_2lowreg_encoding(dst, src));
178 return; 190 return;
179 } else { 191 } else {
180 mov_reg_t3(dst, src, s, cond); 192 mov_reg_t3(dst, src, s, cond);
181 return; 193 return;
182 } 194 }
183 } 195 }
184 UNREACHABLE(); 196 UNREACHABLE();
185 } 197 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 257 }
246 } else { // (src.shift_imm_ != 0) 258 } else { // (src.shift_imm_ != 0)
247 // Register. 259 // Register.
248 cmp_reg_t3(dst, src, cond); 260 cmp_reg_t3(dst, src, cond);
249 return; 261 return;
250 } 262 }
251 UNREACHABLE(); 263 UNREACHABLE();
252 } 264 }
253 265
254 266
255 void Assembler::lsl_thumb(Register dst, const Operand& src, SBit s, 267 void Assembler::lsl_thumb(Register dst, const Operand& src, SBitMode smode,
256 Condition cond) { 268 Condition cond) {
257 ASSERT(cond == al); 269 ASSERT(cond == al);
270 SBit s = sbit_from_mode(smode);
258 if (!src.rs_.is_valid()) { 271 if (!src.rs_.is_valid()) {
259 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) && s == SetCC) { 272 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) &&
273 smode != LeaveCC) {
260 emit16(thumb16_mode1(LSL_IMM) | 274 emit16(thumb16_mode1(LSL_IMM) |
261 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src)); 275 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src));
262 return; 276 return;
263 } else { 277 } else {
264 lsl_imm_t2(dst, src, s, cond); 278 lsl_imm_t2(dst, src, s, cond);
265 return; 279 return;
266 } 280 }
267 } else { 281 } else {
268 // Register src{rm rs, shift_imm} 282 // Register src{rm rs, shift_imm}
269 if (s == SetCC && dst.code() == src.rm_.code() && 283 if (smode != LeaveCC && dst.code() == src.rm_.code() &&
270 are_low_reg(dst, src.rs_)) { 284 are_low_reg(dst, src.rs_)) {
271 // Register 16 285 // Register 16
272 emit16(thumb16_mode2(LSL_REG) | 286 emit16(thumb16_mode2(LSL_REG) |
273 thumb16_2lowreg_encoding(dst, src.rs_)); 287 thumb16_2lowreg_encoding(dst, src.rs_));
274 return; 288 return;
275 } else { 289 } else {
276 // Register 32 290 // Register 32
277 lsl_reg_t2(dst, src, s, cond); 291 lsl_reg_t2(dst, src, s, cond);
278 return; 292 return;
279 } 293 }
280 } 294 }
281 UNREACHABLE(); 295 UNREACHABLE();
282 } 296 }
283 297
284 298
285 void Assembler::lsr_thumb(Register dst, const Operand& src, SBit s, 299 void Assembler::lsr_thumb(Register dst, const Operand& src, SBitMode smode,
286 Condition cond) { 300 Condition cond) {
287 ASSERT(cond == al); 301 ASSERT(cond == al);
302 SBit s = sbit_from_mode(smode);
288 if (!src.rs_.is_valid()) { 303 if (!src.rs_.is_valid()) {
289 // Immediate 304 // Immediate
290 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) && s == SetCC) { 305 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) &&
306 smode != LeaveCC) {
291 // Immediate 16 307 // Immediate 16
292 emit16(thumb16_mode1(LSR_IMM) | 308 emit16(thumb16_mode1(LSR_IMM) |
293 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src)); 309 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src));
294 return; 310 return;
295 } else { 311 } else {
296 // Immediate 32 312 // Immediate 32
297 lsr_imm_t2(dst, src, s, cond); 313 lsr_imm_t2(dst, src, s, cond);
298 return; 314 return;
299 } 315 }
300 } else { 316 } else {
301 if (s == SetCC && dst.code() == src.rm_.code() && 317 if (smode != LeaveCC && dst.code() == src.rm_.code() &&
302 are_low_reg(dst, src.rs_)) { 318 are_low_reg(dst, src.rs_)) {
303 emit16(thumb16_mode2(LSR_REG) | 319 emit16(thumb16_mode2(LSR_REG) |
304 thumb16_2lowreg_encoding(dst, src.rs_)); 320 thumb16_2lowreg_encoding(dst, src.rs_));
305 return; 321 return;
306 } else { 322 } else {
307 lsr_reg_t2(dst, src, s, cond); 323 lsr_reg_t2(dst, src, s, cond);
308 return; 324 return;
309 } 325 }
310 } 326 }
311 UNREACHABLE(); 327 UNREACHABLE();
312 } 328 }
313 329
314 330
315 void Assembler::ror_thumb(Register dst, const Operand& src, SBit s, 331 void Assembler::ror_thumb(Register dst, const Operand& src, SBitMode smode,
316 Condition cond) { 332 Condition cond) {
317 ASSERT(cond == al); 333 ASSERT(cond == al);
334 SBit s = sbit_from_mode(smode);
318 if (!src.rs_.is_valid()) { 335 if (!src.rs_.is_valid()) {
319 // Immediate 336 // Immediate
320 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) && s == SetCC) { 337 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) &&
338 smode != LeaveCC) {
321 // Immediate 16 339 // Immediate 16
322 emit16(thumb16_mode1(ROR_IMM) | 340 emit16(thumb16_mode1(ROR_IMM) |
323 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src)); 341 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src));
324 return; 342 return;
325 } else { 343 } else {
326 // Immediate 32 344 // Immediate 32
327 ror_imm_t2(dst, src, s, cond); 345 ror_imm_t2(dst, src, s, cond);
328 return; 346 return;
329 } 347 }
330 } else { 348 } else {
331 if (s == SetCC && dst.code() == src.rm_.code() && 349 if (smode != LeaveCC && dst.code() == src.rm_.code() &&
332 are_low_reg(dst, src.rs_)) { 350 are_low_reg(dst, src.rs_)) {
333 emit16(thumb16_mode2(ROR_REG) | 351 emit16(thumb16_mode2(ROR_REG) |
334 thumb16_2lowreg_encoding(dst, src.rs_)); 352 thumb16_2lowreg_encoding(dst, src.rs_));
335 return; 353 return;
336 } else { 354 } else {
337 ror_reg_t2(dst, src, s, cond); 355 ror_reg_t2(dst, src, s, cond);
338 return; 356 return;
339 } 357 }
340 } 358 }
341 UNREACHABLE(); 359 UNREACHABLE();
342 } 360 }
343 361
344 362
345 void Assembler::asr_thumb(Register dst, const Operand& src, SBit s, 363 void Assembler::asr_thumb(Register dst, const Operand& src, SBitMode smode,
346 Condition cond) { 364 Condition cond, bool is_in_it_block) {
365 SBit s = sbit_from_mode(smode);
347 if (!src.rs_.is_valid()) { 366 if (!src.rs_.is_valid()) {
348 // Immediate 367 // Immediate
349 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) && s == SetCC) { 368 if (is_int5(src.shift_imm_) && are_low_reg(dst, src.rm_) &&
369 it_block_smode_check(is_in_it_block, smode)) {
350 // Immediate 16 370 // Immediate 16
351 emit16(thumb16_mode1(ASR_IMM) | 371 emit16(thumb16_mode1(ASR_IMM) |
352 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src)); 372 thumb16_2lowreg_imm5_encoding(dst, src.rm_, src));
353 return; 373 return;
354 } else { 374 } else {
355 // Immediate 32 375 // Immediate 32
356 asr_imm_t2(dst, src, s, cond); 376 asr_imm_t2(dst, src, s, cond);
357 return; 377 return;
358 } 378 }
359 } else { 379 } else {
360 // Register 380 // Register
361 if (s == SetCC && dst.code() == src.rm_.code() && 381 if (it_block_smode_check(is_in_it_block, smode) &&
362 are_low_reg(dst, src.rs_)) { 382 dst.code() == src.rm_.code() && are_low_reg(dst, src.rs_)) {
363 // Register 16 383 // Register 16
364 emit16(thumb16_mode2(ASR_REG) | 384 emit16(thumb16_mode2(ASR_REG) |
365 thumb16_2lowreg_encoding(dst, src.rs_)); 385 thumb16_2lowreg_encoding(dst, src.rs_));
366 return; 386 return;
367 } else { 387 } else {
368 asr_reg_t2(dst, src, s, cond); 388 asr_reg_t2(dst, src, s, cond);
369 return; 389 return;
370 } 390 }
371 } 391 }
372 UNREACHABLE(); 392 UNREACHABLE();
373 } 393 }
374 394
375 395
376 void Assembler::and_thumb(Register dst, Register src1, const Operand& src2, 396 void Assembler::and_thumb(Register dst, Register src1, const Operand& src2,
377 SBit s, Condition cond) { 397 SBitMode smode, Condition cond) {
378 ASSERT(cond == al); 398 ASSERT(cond == al);
399 SBit s = sbit_from_mode(smode);
379 if (!src2.rm_.is_valid()) { 400 if (!src2.rm_.is_valid()) {
380 // Immediate. 401 // Immediate.
381 uint32_t i, imm3, imm8; 402 uint32_t i, imm3, imm8;
382 if (src2.imm32_ < 0 && thumb_expand_imm(~src2.imm32_, &i, &imm3, &imm8)) { 403 if (src2.imm32_ < 0 && thumb_expand_imm(~src2.imm32_, &i, &imm3, &imm8)) {
383 bic_imm_t1(dst, src1, s, cond, i, imm3, imm8); 404 bic_imm_t1(dst, src1, s, cond, i, imm3, imm8);
384 return; 405 return;
385 } else if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 406 } else if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
386 and_imm_t1(dst, src1, s, cond, i, imm3, imm8); 407 and_imm_t1(dst, src1, s, cond, i, imm3, imm8);
387 return; 408 return;
388 } 409 }
389 mov_thumb(ip, src2, LeaveCC, al); 410 mov_thumb(ip, src2, LeaveCC, al);
390 and_thumb(dst, src1, Operand(ip), s, al); 411 and_thumb(dst, src1, Operand(ip), smode, al);
391 return; 412 return;
392 } else { 413 } else {
393 // Register. 414 // Register.
394 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 415 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
395 s == SetCC && src2.shift_imm_ == 0) { 416 smode != LeaveCC && src2.shift_imm_ == 0) {
396 emit16(thumb16_mode2(AND_REG) | 417 emit16(thumb16_mode2(AND_REG) |
397 thumb16_2lowreg_encoding(dst, src2)); 418 thumb16_2lowreg_encoding(dst, src2));
398 return; 419 return;
399 } else { 420 } else {
400 and_reg_t2(dst, src1, src2, s, cond); 421 and_reg_t2(dst, src1, src2, s, cond);
401 return; 422 return;
402 } 423 }
403 } 424 }
404 UNREACHABLE(); 425 UNREACHABLE();
405 } 426 }
406 427
407 428
408 void Assembler::eor_thumb(Register dst, Register src1, const Operand& src2, 429 void Assembler::eor_thumb(Register dst, Register src1, const Operand& src2,
409 SBit s, Condition cond) { 430 SBitMode smode, Condition cond) {
410 ASSERT(cond == al); 431 ASSERT(cond == al);
432 SBit s = sbit_from_mode(smode);
411 if (!src2.rm_.is_valid()) { 433 if (!src2.rm_.is_valid()) {
412 // Immediate. 434 // Immediate.
413 uint32_t i, imm3, imm8; 435 uint32_t i, imm3, imm8;
414 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 436 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
415 eor_imm_t1(dst, src1, s, cond, i, imm3, imm8); 437 eor_imm_t1(dst, src1, s, cond, i, imm3, imm8);
416 return; 438 return;
417 } 439 }
418 mov_thumb(ip, src2, LeaveCC, al); 440 mov_thumb(ip, src2, LeaveCC, al);
419 eor_thumb(dst, src1, Operand(ip), s, al); 441 eor_thumb(dst, src1, Operand(ip), smode, al);
420 return; 442 return;
421 } else { 443 } else {
422 // Register. 444 // Register.
423 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 445 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
424 s == SetCC && src2.shift_imm_ == 0) { 446 smode != LeaveCC && src2.shift_imm_ == 0) {
425 emit16(thumb16_mode2(EOR_REG) | 447 emit16(thumb16_mode2(EOR_REG) |
426 thumb16_2lowreg_encoding(dst, src2)); 448 thumb16_2lowreg_encoding(dst, src2));
427 return; 449 return;
428 } else { 450 } else {
429 eor_reg_t2(dst, src1, src2, s, cond); 451 eor_reg_t2(dst, src1, src2, s, cond);
430 return; 452 return;
431 } 453 }
432 } 454 }
433 UNREACHABLE(); 455 UNREACHABLE();
434 } 456 }
435 457
436 458
437 void Assembler::adc_thumb(Register dst, Register src1, const Operand& src2, 459 void Assembler::adc_thumb(Register dst, Register src1, const Operand& src2,
438 SBit s, Condition cond) { 460 SBitMode smode, Condition cond) {
439 ASSERT(cond == al); 461 ASSERT(cond == al);
462 SBit s = sbit_from_mode(smode);
440 if (!src2.rm_.is_valid()) { 463 if (!src2.rm_.is_valid()) {
441 // Immediate. 464 // Immediate.
442 uint32_t i, imm3, imm8; 465 uint32_t i, imm3, imm8;
443 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 466 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
444 adc_imm_t1(dst, src1, s, cond, i, imm3, imm8); 467 adc_imm_t1(dst, src1, s, cond, i, imm3, imm8);
445 return; 468 return;
446 } 469 }
447 mov_thumb(ip, src2, LeaveCC, al); 470 mov_thumb(ip, src2, LeaveCC, al);
448 adc_thumb(dst, src1, Operand(ip), s, al); 471 adc_thumb(dst, src1, Operand(ip), smode, al);
449 return; 472 return;
450 } else { 473 } else {
451 // Register. 474 // Register.
452 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 475 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
453 s == SetCC && src2.shift_imm_ == 0) { 476 smode != LeaveCC && src2.shift_imm_ == 0) {
454 emit16(thumb16_mode2(ADC_REG) | 477 emit16(thumb16_mode2(ADC_REG) |
455 thumb16_2lowreg_encoding(dst, src2)); 478 thumb16_2lowreg_encoding(dst, src2));
456 return; 479 return;
457 } else { 480 } else {
458 adc_reg_t2(dst, src1, src2, s, cond); 481 adc_reg_t2(dst, src1, src2, s, cond);
459 return; 482 return;
460 } 483 }
461 } 484 }
462 UNREACHABLE(); 485 UNREACHABLE();
463 } 486 }
464 487
465 488
466 void Assembler::sbc_thumb(Register dst, Register src1, const Operand& src2, 489 void Assembler::sbc_thumb(Register dst, Register src1, const Operand& src2,
467 SBit s, Condition cond) { 490 SBitMode smode, Condition cond) {
468 ASSERT(cond == al); 491 ASSERT(cond == al);
492 SBit s = sbit_from_mode(smode);
469 if (!src2.rm_.is_valid()) { 493 if (!src2.rm_.is_valid()) {
470 // Immediate. 494 // Immediate.
471 uint32_t i, imm3, imm8; 495 uint32_t i, imm3, imm8;
472 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 496 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
473 sbc_imm_t1(dst, src1, s, cond, i, imm3, imm8); 497 sbc_imm_t1(dst, src1, s, cond, i, imm3, imm8);
474 return; 498 return;
475 } 499 }
476 mov_thumb(ip, src2, LeaveCC, al); 500 mov_thumb(ip, src2, LeaveCC, al);
477 sbc_thumb(dst, src1, Operand(ip), s, al); 501 sbc_thumb(dst, src1, Operand(ip), smode, al);
478 return; 502 return;
479 } else { 503 } else {
480 // Register. 504 // Register.
481 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 505 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
482 s == SetCC && src2.shift_imm_ == 0) { 506 smode != LeaveCC && src2.shift_imm_ == 0) {
483 emit16(thumb16_mode2(SBC_REG) | 507 emit16(thumb16_mode2(SBC_REG) |
484 thumb16_2lowreg_encoding(dst, src2)); 508 thumb16_2lowreg_encoding(dst, src2));
485 return; 509 return;
486 } else { 510 } else {
487 sbc_reg_t2(dst, src1, src2, s, cond); 511 sbc_reg_t2(dst, src1, src2, s, cond);
488 return; 512 return;
489 } 513 }
490 } 514 }
491 UNREACHABLE(); 515 UNREACHABLE();
492 } 516 }
493 517
494 518
495 void Assembler::rsb_thumb(Register dst, Register src1, const Operand& src2, 519 void Assembler::rsb_thumb(Register dst, Register src1, const Operand& src2,
496 SBit s, Condition cond) { 520 SBitMode smode, Condition cond) {
497 emit_it(cond); 521 bool is_in_it_block = emit_it(cond);
522 SBit s = sbit_from_mode(smode);
498 if (!src2.rm_.is_valid()) { 523 if (!src2.rm_.is_valid()) {
499 // Immediate. 524 // Immediate.
500 if (src2.imm32_ == 0 && are_low_reg(dst, src1)) { 525 if (it_block_smode_check(is_in_it_block, smode) &&
526 src2.imm32_ == 0 &&
527 are_low_reg(dst, src1)) {
501 emit16(thumb16_mode2(RSB_IMM) | 528 emit16(thumb16_mode2(RSB_IMM) |
502 thumb16_2lowreg_encoding(dst, src1)); 529 thumb16_2lowreg_encoding(dst, src1));
503 return; 530 return;
504 } else { 531 } else {
505 uint32_t i, imm3, imm8; 532 uint32_t i, imm3, imm8;
506 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 533 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
507 rsb_imm_t2(dst, src1, s, cond, i, imm3, imm8); 534 rsb_imm_t2(dst, src1, s, cond, i, imm3, imm8);
508 return; 535 return;
509 } 536 }
510 ASSERT(cond == al); 537 ASSERT(cond == al);
511 mov_thumb(ip, src2, LeaveCC, al); 538 mov_thumb(ip, src2, LeaveCC, al);
512 rsb_thumb(dst, src1, Operand(ip), s, al); 539 rsb_thumb(dst, src1, Operand(ip), smode, al);
513 return; 540 return;
514 } 541 }
515 } else { 542 } else {
516 // Register. 543 // Register.
517 rsb_reg_t1(dst, src1, src2, s, cond); 544 rsb_reg_t1(dst, src1, src2, s, cond);
518 return; 545 return;
519 } 546 }
520 UNREACHABLE(); 547 UNREACHABLE();
521 } 548 }
522 549
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 } else { 597 } else {
571 cmn_reg_t2(src1, src2, cond); 598 cmn_reg_t2(src1, src2, cond);
572 return; 599 return;
573 } 600 }
574 } 601 }
575 UNREACHABLE(); 602 UNREACHABLE();
576 } 603 }
577 604
578 605
579 void Assembler::bic_thumb(Register dst, Register src1, const Operand& src2, 606 void Assembler::bic_thumb(Register dst, Register src1, const Operand& src2,
580 SBit s, Condition cond) { 607 SBitMode smode, Condition cond) {
581 ASSERT(cond == al); 608 ASSERT(cond == al);
609 SBit s = sbit_from_mode(smode);
582 if (!src2.rm_.is_valid()) { 610 if (!src2.rm_.is_valid()) {
583 // Immediate. 611 // Immediate.
584 uint32_t i, imm3, imm8; 612 uint32_t i, imm3, imm8;
585 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 613 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
586 bic_imm_t1(dst, src1, s, cond, i, imm3, imm8); 614 bic_imm_t1(dst, src1, s, cond, i, imm3, imm8);
587 return; 615 return;
588 } 616 }
589 mov_thumb(ip, src2, LeaveCC, al); 617 mov_thumb(ip, src2, LeaveCC, al);
590 bic_thumb(dst, src1, Operand(ip), s, al); 618 bic_thumb(dst, src1, Operand(ip), smode, al);
591 return; 619 return;
592 } else { 620 } else {
593 // Register. 621 // Register.
594 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 622 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
595 s == SetCC && src2.shift_imm_ == 0) { 623 smode != LeaveCC && src2.shift_imm_ == 0) {
596 emit16(thumb16_mode2(BIC_REG) | 624 emit16(thumb16_mode2(BIC_REG) |
597 thumb16_2lowreg_encoding(dst, src2)); 625 thumb16_2lowreg_encoding(dst, src2));
598 return; 626 return;
599 } else { 627 } else {
600 bic_reg_t2(dst, src1, src2, s, cond); 628 bic_reg_t2(dst, src1, src2, s, cond);
601 return; 629 return;
602 } 630 }
603 } 631 }
604 UNREACHABLE(); 632 UNREACHABLE();
605 } 633 }
606 634
607 635
608 void Assembler::mul_thumb(Register dst, Register src1, Register src2, 636 void Assembler::mul_thumb(Register dst, Register src1, Register src2,
609 SBit s, Condition cond) { 637 SBitMode smode, Condition cond) {
610 ASSERT(cond == al); 638 ASSERT(cond == al);
611 if (dst.code() == src2.code() && are_low_reg(src1, src2) && s == SetCC) { 639 if (dst.code() == src2.code() && are_low_reg(src1, src2) &&
640 smode != LeaveCC) {
612 emit16(thumb16_mode2(MUL_REG) | 641 emit16(thumb16_mode2(MUL_REG) |
613 thumb16_2lowreg_encoding(dst, src1)); 642 thumb16_2lowreg_encoding(dst, src1));
614 return; 643 return;
615 } else if (dst.code() == src1.code() && are_low_reg(src1, src2) && 644 } else if (dst.code() == src1.code() && are_low_reg(src1, src2) &&
616 s == SetCC) { 645 smode != LeaveCC) {
617 emit16(thumb16_mode2(MUL_REG) | 646 emit16(thumb16_mode2(MUL_REG) |
618 thumb16_2lowreg_encoding(dst, src2)); 647 thumb16_2lowreg_encoding(dst, src2));
619 return; 648 return;
620 } else { 649 } else {
650 SBit s = sbit_from_mode(smode);
621 mul_t2(dst, src1, src2, s, cond); 651 mul_t2(dst, src1, src2, s, cond);
622 return; 652 return;
623 } 653 }
624 UNREACHABLE(); 654 UNREACHABLE();
625 } 655 }
626 656
627 657
628 void Assembler::mvn_thumb(Register dst, const Operand& src, SBit s, 658 void Assembler::mvn_thumb(Register dst, const Operand& src, SBitMode smode,
629 Condition cond) { 659 Condition cond) {
630 ASSERT(cond == al); 660 ASSERT(cond == al);
661 SBit s = sbit_from_mode(smode);
631 if (!src.rm_.is_valid()) { 662 if (!src.rm_.is_valid()) {
632 // Immediate. 663 // Immediate.
633 uint32_t i, imm3, imm8; 664 uint32_t i, imm3, imm8;
634 if (thumb_expand_imm(src.imm32_, &i, &imm3, &imm8)) { 665 if (thumb_expand_imm(src.imm32_, &i, &imm3, &imm8)) {
635 mvn_imm_t1(dst, s, cond, i, imm3, imm8); 666 mvn_imm_t1(dst, s, cond, i, imm3, imm8);
636 return; 667 return;
637 } 668 }
638 mov_thumb(ip, src, LeaveCC, al); 669 mov_thumb(ip, src, LeaveCC, al);
639 rsb_thumb(dst, ip, Operand(0), s, al); 670 rsb_thumb(dst, ip, Operand(0), smode, al);
640 return; 671 return;
641 } else { 672 } else {
642 // Register. 673 // Register.
643 if (are_low_reg(dst, src.rm_) && s == SetCC && src.shift_imm_ == 0) { 674 if (are_low_reg(dst, src.rm_) && smode != LeaveCC && src.shift_imm_ == 0) {
644 emit16(thumb16_mode2(MVN_REG) | 675 emit16(thumb16_mode2(MVN_REG) |
645 thumb16_2anyreg_encoding(dst, src)); 676 thumb16_2anyreg_encoding(dst, src));
646 return; 677 return;
647 } else { 678 } else {
648 mvn_reg_t2(dst, src, s, cond); 679 mvn_reg_t2(dst, src, s, cond);
649 return; 680 return;
650 } 681 }
651 } 682 }
652 UNREACHABLE(); 683 UNREACHABLE();
653 } 684 }
654 685
655 686
656 void Assembler::orr_thumb(Register dst, Register src1, const Operand& src2, 687 void Assembler::orr_thumb(Register dst, Register src1, const Operand& src2,
657 SBit s, Condition cond) { 688 SBitMode smode, Condition cond) {
658 ASSERT(cond == al); 689 ASSERT(cond == al);
690 SBit s = sbit_from_mode(smode);
659 if (!src2.rm_.is_valid()) { 691 if (!src2.rm_.is_valid()) {
660 // Immediate. 692 // Immediate.
661 uint32_t i, imm3, imm8; 693 uint32_t i, imm3, imm8;
662 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) { 694 if (thumb_expand_imm(src2.imm32_, &i, &imm3, &imm8)) {
663 orr_imm_t1(dst, src1, s, cond, i, imm3, imm8); 695 orr_imm_t1(dst, src1, s, cond, i, imm3, imm8);
664 return; 696 return;
665 } 697 }
666 mov_thumb(ip, src2, LeaveCC, al); 698 mov_thumb(ip, src2, LeaveCC, al);
667 orr_thumb(dst, src1, Operand(ip), s, al); 699 orr_thumb(dst, src1, Operand(ip), smode, al);
668 return; 700 return;
669 } else { 701 } else {
670 // Register. 702 // Register.
671 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) && 703 if (dst.code() == src1.code() && are_low_reg(src1, src2.rm_) &&
672 s == SetCC && src2.shift_imm_ == 0) { 704 smode != LeaveCC && src2.shift_imm_ == 0) {
673 emit16(thumb16_mode2(ORR_REG) | 705 emit16(thumb16_mode2(ORR_REG) |
674 thumb16_2lowreg_encoding(dst, src2)); 706 thumb16_2lowreg_encoding(dst, src2));
675 return; 707 return;
676 } else if (src2.rs_.is_valid()) { 708 } else if (src2.rs_.is_valid()) {
677 ASSERT(src2.shift_op_ == LSL); 709 ASSERT(src2.shift_op_ == LSL);
678 lsl_thumb(dst, src2, s, cond); 710 lsl_thumb(dst, src2, smode, cond);
679 orr_thumb(dst, src1, Operand(dst), s, cond); 711 orr_thumb(dst, src1, Operand(dst), smode, cond);
680 return; 712 return;
681 } else { 713 } else {
682 orr_reg_t2(dst, src1, src2, s, cond); 714 orr_reg_t2(dst, src1, src2, s, cond);
683 return; 715 return;
684 } 716 }
685 } 717 }
686 UNREACHABLE(); 718 UNREACHABLE();
687 } 719 }
688 720
689 721
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 } else { 1276 } else {
1245 // Encoding T2 (register) - 32 bit 1277 // Encoding T2 (register) - 32 bit
1246 emit32(thumb32_mode8(LDRSH_32_REG) | thumb32_3reg_lsl(dst, src)); 1278 emit32(thumb32_mode8(LDRSH_32_REG) | thumb32_3reg_lsl(dst, src));
1247 return; 1279 return;
1248 } 1280 }
1249 UNREACHABLE(); 1281 UNREACHABLE();
1250 } 1282 }
1251 1283
1252 1284
1253 void Assembler::mla_thumb(Register dst, Register src1, Register src2, 1285 void Assembler::mla_thumb(Register dst, Register src1, Register src2,
1254 Register srcA, SBit s, Condition cond) { 1286 Register srcA, SBitMode smode, Condition cond) {
1255 ASSERT(cond == al && s == LeaveCC); 1287 ASSERT(cond == al && smode != SetCC);
1256 emit32(thumb32_mode16(MLA_32) | 1288 emit32(thumb32_mode16(MLA_32) |
1257 thumb32_4reg(dst, src1, src2, srcA)); 1289 thumb32_4reg(dst, src1, src2, srcA));
1258 } 1290 }
1259 1291
1260 1292
1261 void Assembler::mls_thumb(Register dst, Register src1, Register src2, 1293 void Assembler::mls_thumb(Register dst, Register src1, Register src2,
1262 Register srcA, Condition cond) { 1294 Register srcA, Condition cond) {
1263 ASSERT(cond == al); 1295 ASSERT(cond == al);
1264 emit32(thumb32_mode16(MLS_32) | 1296 emit32(thumb32_mode16(MLS_32) |
1265 thumb32_4reg(dst, src1, src2, srcA)); 1297 thumb32_4reg(dst, src1, src2, srcA));
1266 } 1298 }
1267 1299
1268 1300
1269 void Assembler::sdiv_thumb(Register dst, Register src1, Register src2, 1301 void Assembler::sdiv_thumb(Register dst, Register src1, Register src2,
1270 Condition cond) { 1302 Condition cond) {
1271 ASSERT(cond == al); 1303 ASSERT(cond == al);
1272 emit32(thumb32_mode17(SDIV_32) | thumb32_4reg(dst, src1, src2, pc) | 1304 emit32(thumb32_mode17(SDIV_32) | thumb32_4reg(dst, src1, src2, pc) |
1273 B7 | B6 | B5 | B4); 1305 B7 | B6 | B5 | B4);
1274 } 1306 }
1275 1307
1276 1308
1277 void Assembler::smlal_thumb(Register dstL, Register dstH, Register src1, 1309 void Assembler::smlal_thumb(Register dstL, Register dstH, Register src1,
1278 Register src2, SBit s, Condition cond) { 1310 Register src2, SBitMode smode, Condition cond) {
1279 ASSERT(cond == al && s == LeaveCC); 1311 ASSERT(cond == al && smode != SetCC);
1280 ASSERT(dstL.code() != dstH.code()); 1312 ASSERT(dstL.code() != dstH.code());
1281 emit32(thumb32_mode17(SMLAL_32) | thumb32_4reg(dstH, src1, src2, dstL)); 1313 emit32(thumb32_mode17(SMLAL_32) | thumb32_4reg(dstH, src1, src2, dstL));
1282 } 1314 }
1283 1315
1284 1316
1285 void Assembler::smull_thumb(Register dstL, Register dstH, Register src1, 1317 void Assembler::smull_thumb(Register dstL, Register dstH, Register src1,
1286 Register src2, SBit s, Condition cond) { 1318 Register src2, SBitMode smode, Condition cond) {
1287 ASSERT(cond == al && s == LeaveCC); 1319 ASSERT(cond == al && smode != SetCC);
1288 ASSERT(dstL.code() != dstH.code()); 1320 ASSERT(dstL.code() != dstH.code());
1289 emit32(thumb32_mode17(SMULL_32) | thumb32_4reg(dstH, src1, src2, dstL)); 1321 emit32(thumb32_mode17(SMULL_32) | thumb32_4reg(dstH, src1, src2, dstL));
1290 } 1322 }
1291 1323
1292 1324
1293 void Assembler::umlal_thumb(Register dstL, Register dstH, Register src1, 1325 void Assembler::umlal_thumb(Register dstL, Register dstH, Register src1,
1294 Register src2, SBit s, Condition cond) { 1326 Register src2, SBitMode smode, Condition cond) {
1295 ASSERT(cond == al && s == LeaveCC); 1327 ASSERT(cond == al && smode != SetCC);
1296 ASSERT(dstL.code() != dstH.code()); 1328 ASSERT(dstL.code() != dstH.code());
1297 emit32(thumb32_mode17(UMLAL_32) | thumb32_4reg(dstH, src1, src2, dstL)); 1329 emit32(thumb32_mode17(UMLAL_32) | thumb32_4reg(dstH, src1, src2, dstL));
1298 } 1330 }
1299 1331
1300 1332
1301 void Assembler::umull_thumb(Register dstL, Register dstH, Register src1, 1333 void Assembler::umull_thumb(Register dstL, Register dstH, Register src1,
1302 Register src2, SBit s, Condition cond) { 1334 Register src2, SBitMode smode, Condition cond) {
1303 ASSERT(cond == al && s == LeaveCC); 1335 ASSERT(cond == al && smode != SetCC);
1304 ASSERT(dstL.code() != dstH.code()); 1336 ASSERT(dstL.code() != dstH.code());
1305 emit32(thumb32_mode17(UMULL_32) | thumb32_4reg(dstH, src1, src2, dstL)); 1337 emit32(thumb32_mode17(UMULL_32) | thumb32_4reg(dstH, src1, src2, dstL));
1306 } 1338 }
1307 1339
1308 1340
1309 void Assembler::ldm_thumb(BlockAddrMode am, 1341 void Assembler::ldm_thumb(BlockAddrMode am,
1310 Register base, 1342 Register base,
1311 RegList dst, 1343 RegList dst,
1312 Condition cond) { 1344 Condition cond) {
1313 ASSERT(cond == al); 1345 ASSERT(cond == al);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 1385
1354 bool Assembler::IsThumbLdrPcImmediateOffset(Instr instr) { 1386 bool Assembler::IsThumbLdrPcImmediateOffset(Instr instr) {
1355 // Check the instruction is indeed a 1387 // Check the instruction is indeed a
1356 // ldr<cond> <Rd>, [pc +/- offset_12]. 1388 // ldr<cond> <Rd>, [pc +/- offset_12].
1357 return (instr & kThumbLdrPCMask) == kThumbLdrPCPattern; 1389 return (instr & kThumbLdrPCMask) == kThumbLdrPCPattern;
1358 } 1390 }
1359 1391
1360 } } // namespace v8::internal 1392 } } // namespace v8::internal
1361 1393
1362 #endif // V8_TARGET_ARCH_ARM 1394 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm-inl.h ('k') | src/arm/assembler-thumb32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698