Changeset 50553 in webkit for trunk/JavaScriptCore/assembler/ARMAssembler.cpp
- Timestamp:
- Nov 5, 2009, 12:28:02 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/assembler/ARMAssembler.cpp
r48525 r50553 119 119 return OP2_IMM | (imm >> 24) | (rol << 8); 120 120 121 return 0;121 return INVALID_IMM; 122 122 } 123 123 … … 237 237 // Do it by 1 instruction 238 238 tmp = getOp2(imm); 239 if (tmp )239 if (tmp != INVALID_IMM) 240 240 return tmp; 241 241 242 242 tmp = getOp2(~imm); 243 if (tmp ) {243 if (tmp != INVALID_IMM) { 244 244 if (invert) 245 245 return tmp | OP2_INV_IMM; … … 248 248 } 249 249 250 // Do it by 2 instruction 251 if (genInt(tmpReg, imm, true)) 252 return tmpReg; 253 if (genInt(tmpReg, ~imm, false)) 254 return tmpReg; 255 256 ldr_imm(tmpReg, imm); 257 return tmpReg; 250 return encodeComplexImm(imm, tmpReg); 258 251 } 259 252 … … 264 257 // Do it by 1 instruction 265 258 tmp = getOp2(imm); 266 if (tmp ) {259 if (tmp != INVALID_IMM) { 267 260 mov_r(dest, tmp); 268 261 return; … … 270 263 271 264 tmp = getOp2(~imm); 272 if (tmp ) {265 if (tmp != INVALID_IMM) { 273 266 mvn_r(dest, tmp); 274 267 return; 275 268 } 276 269 270 encodeComplexImm(imm, dest); 271 } 272 273 ARMWord ARMAssembler::encodeComplexImm(ARMWord imm, int dest) 274 { 275 ARMWord tmp; 276 277 #if ARM_ARCH_VERSION >= 7 278 tmp = getImm16Op2(imm); 279 if (tmp != INVALID_IMM) { 280 movw_r(dest, tmp); 281 return dest; 282 } 283 movw_r(dest, getImm16Op2(imm & 0xffff)); 284 movt_r(dest, getImm16Op2(imm >> 16)); 285 return dest; 286 #else 277 287 // Do it by 2 instruction 278 288 if (genInt(dest, imm, true)) 279 return ;289 return dest; 280 290 if (genInt(dest, ~imm, false)) 281 return ;291 return dest; 282 292 283 293 ldr_imm(dest, imm); 294 return dest; 295 #endif 284 296 } 285 297
Note:
See TracChangeset
for help on using the changeset viewer.