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

Side by Side Diff: src/arm64/macro-assembler-arm64.h

Issue 440303004: ARM64: Support arbitrary offset in load/store pair. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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/arm64/assembler-arm64.cc ('k') | src/arm64/macro-assembler-arm64.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "src/globals.h" 10 #include "src/globals.h"
(...skipping 25 matching lines...) Expand all
36 V(Ldrb, Register&, rt, LDRB_w) \ 36 V(Ldrb, Register&, rt, LDRB_w) \
37 V(Strb, Register&, rt, STRB_w) \ 37 V(Strb, Register&, rt, STRB_w) \
38 V(Ldrsb, Register&, rt, rt.Is64Bits() ? LDRSB_x : LDRSB_w) \ 38 V(Ldrsb, Register&, rt, rt.Is64Bits() ? LDRSB_x : LDRSB_w) \
39 V(Ldrh, Register&, rt, LDRH_w) \ 39 V(Ldrh, Register&, rt, LDRH_w) \
40 V(Strh, Register&, rt, STRH_w) \ 40 V(Strh, Register&, rt, STRH_w) \
41 V(Ldrsh, Register&, rt, rt.Is64Bits() ? LDRSH_x : LDRSH_w) \ 41 V(Ldrsh, Register&, rt, rt.Is64Bits() ? LDRSH_x : LDRSH_w) \
42 V(Ldr, CPURegister&, rt, LoadOpFor(rt)) \ 42 V(Ldr, CPURegister&, rt, LoadOpFor(rt)) \
43 V(Str, CPURegister&, rt, StoreOpFor(rt)) \ 43 V(Str, CPURegister&, rt, StoreOpFor(rt)) \
44 V(Ldrsw, Register&, rt, LDRSW_x) 44 V(Ldrsw, Register&, rt, LDRSW_x)
45 45
46 #define LSPAIR_MACRO_LIST(V) \
47 V(Ldp, CPURegister&, rt, rt2, LoadPairOpFor(rt, rt2)) \
48 V(Stp, CPURegister&, rt, rt2, StorePairOpFor(rt, rt2)) \
49 V(Ldpsw, CPURegister&, rt, rt2, LDPSW_x)
50
46 51
47 // ---------------------------------------------------------------------------- 52 // ----------------------------------------------------------------------------
48 // Static helper functions 53 // Static helper functions
49 54
50 // Generate a MemOperand for loading a field from an object. 55 // Generate a MemOperand for loading a field from an object.
51 inline MemOperand FieldMemOperand(Register object, int offset); 56 inline MemOperand FieldMemOperand(Register object, int offset);
52 inline MemOperand UntagSmiFieldMemOperand(Register object, int offset); 57 inline MemOperand UntagSmiFieldMemOperand(Register object, int offset);
53 58
54 // Generate a MemOperand for loading a SMI from memory. 59 // Generate a MemOperand for loading a SMI from memory.
55 inline MemOperand UntagSmiMemOperand(Register object, int offset); 60 inline MemOperand UntagSmiMemOperand(Register object, int offset);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 // Load/store macros. 259 // Load/store macros.
255 #define DECLARE_FUNCTION(FN, REGTYPE, REG, OP) \ 260 #define DECLARE_FUNCTION(FN, REGTYPE, REG, OP) \
256 inline void FN(const REGTYPE REG, const MemOperand& addr); 261 inline void FN(const REGTYPE REG, const MemOperand& addr);
257 LS_MACRO_LIST(DECLARE_FUNCTION) 262 LS_MACRO_LIST(DECLARE_FUNCTION)
258 #undef DECLARE_FUNCTION 263 #undef DECLARE_FUNCTION
259 264
260 void LoadStoreMacro(const CPURegister& rt, 265 void LoadStoreMacro(const CPURegister& rt,
261 const MemOperand& addr, 266 const MemOperand& addr,
262 LoadStoreOp op); 267 LoadStoreOp op);
263 268
269 #define DECLARE_FUNCTION(FN, REGTYPE, REG, REG2, OP) \
270 inline void FN(const REGTYPE REG, const REGTYPE REG2, const MemOperand& addr);
271 LSPAIR_MACRO_LIST(DECLARE_FUNCTION)
272 #undef DECLARE_FUNCTION
273
274 void LoadStorePairMacro(const CPURegister& rt, const CPURegister& rt2,
275 const MemOperand& addr, LoadStorePairOp op);
276
264 // V8-specific load/store helpers. 277 // V8-specific load/store helpers.
265 void Load(const Register& rt, const MemOperand& addr, Representation r); 278 void Load(const Register& rt, const MemOperand& addr, Representation r);
266 void Store(const Register& rt, const MemOperand& addr, Representation r); 279 void Store(const Register& rt, const MemOperand& addr, Representation r);
267 280
268 enum AdrHint { 281 enum AdrHint {
269 // The target must be within the immediate range of adr. 282 // The target must be within the immediate range of adr.
270 kAdrNear, 283 kAdrNear,
271 // The target may be outside of the immediate range of adr. Additional 284 // The target may be outside of the immediate range of adr. Additional
272 // instructions may be emitted. 285 // instructions may be emitted.
273 kAdrFar 286 kAdrFar
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 inline void Fsqrt(const FPRegister& fd, const FPRegister& fn); 424 inline void Fsqrt(const FPRegister& fd, const FPRegister& fn);
412 inline void Fsub(const FPRegister& fd, 425 inline void Fsub(const FPRegister& fd,
413 const FPRegister& fn, 426 const FPRegister& fn,
414 const FPRegister& fm); 427 const FPRegister& fm);
415 inline void Hint(SystemHint code); 428 inline void Hint(SystemHint code);
416 inline void Hlt(int code); 429 inline void Hlt(int code);
417 inline void Isb(); 430 inline void Isb();
418 inline void Ldnp(const CPURegister& rt, 431 inline void Ldnp(const CPURegister& rt,
419 const CPURegister& rt2, 432 const CPURegister& rt2,
420 const MemOperand& src); 433 const MemOperand& src);
421 inline void Ldp(const CPURegister& rt,
422 const CPURegister& rt2,
423 const MemOperand& src);
424 inline void Ldpsw(const Register& rt,
425 const Register& rt2,
426 const MemOperand& src);
427 // Load a literal from the inline constant pool. 434 // Load a literal from the inline constant pool.
428 inline void Ldr(const CPURegister& rt, const Immediate& imm); 435 inline void Ldr(const CPURegister& rt, const Immediate& imm);
429 // Helper function for double immediate. 436 // Helper function for double immediate.
430 inline void Ldr(const CPURegister& rt, double imm); 437 inline void Ldr(const CPURegister& rt, double imm);
431 inline void Lsl(const Register& rd, const Register& rn, unsigned shift); 438 inline void Lsl(const Register& rd, const Register& rn, unsigned shift);
432 inline void Lsl(const Register& rd, const Register& rn, const Register& rm); 439 inline void Lsl(const Register& rd, const Register& rn, const Register& rm);
433 inline void Lsr(const Register& rd, const Register& rn, unsigned shift); 440 inline void Lsr(const Register& rd, const Register& rn, unsigned shift);
434 inline void Lsr(const Register& rd, const Register& rn, const Register& rm); 441 inline void Lsr(const Register& rd, const Register& rn, const Register& rm);
435 inline void Madd(const Register& rd, 442 inline void Madd(const Register& rd,
436 const Register& rn, 443 const Register& rn,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 const Register& ra); 483 const Register& ra);
477 inline void Smull(const Register& rd, 484 inline void Smull(const Register& rd,
478 const Register& rn, 485 const Register& rn,
479 const Register& rm); 486 const Register& rm);
480 inline void Smulh(const Register& rd, 487 inline void Smulh(const Register& rd,
481 const Register& rn, 488 const Register& rn,
482 const Register& rm); 489 const Register& rm);
483 inline void Stnp(const CPURegister& rt, 490 inline void Stnp(const CPURegister& rt,
484 const CPURegister& rt2, 491 const CPURegister& rt2,
485 const MemOperand& dst); 492 const MemOperand& dst);
486 inline void Stp(const CPURegister& rt,
487 const CPURegister& rt2,
488 const MemOperand& dst);
489 inline void Sxtb(const Register& rd, const Register& rn); 493 inline void Sxtb(const Register& rd, const Register& rn);
490 inline void Sxth(const Register& rd, const Register& rn); 494 inline void Sxth(const Register& rd, const Register& rn);
491 inline void Sxtw(const Register& rd, const Register& rn); 495 inline void Sxtw(const Register& rd, const Register& rn);
492 void Tbnz(const Register& rt, unsigned bit_pos, Label* label); 496 void Tbnz(const Register& rt, unsigned bit_pos, Label* label);
493 void Tbz(const Register& rt, unsigned bit_pos, Label* label); 497 void Tbz(const Register& rt, unsigned bit_pos, Label* label);
494 inline void Ubfiz(const Register& rd, 498 inline void Ubfiz(const Register& rd,
495 const Register& rn, 499 const Register& rn,
496 unsigned lsb, 500 unsigned lsb,
497 unsigned width); 501 unsigned width);
498 inline void Ubfx(const Register& rd, 502 inline void Ubfx(const Register& rd,
(...skipping 1851 matching lines...) Expand 10 before | Expand all | Expand 10 after
2350 #error "Unsupported option" 2354 #error "Unsupported option"
2351 #define CODE_COVERAGE_STRINGIFY(x) #x 2355 #define CODE_COVERAGE_STRINGIFY(x) #x
2352 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) 2356 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
2353 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) 2357 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
2354 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> 2358 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
2355 #else 2359 #else
2356 #define ACCESS_MASM(masm) masm-> 2360 #define ACCESS_MASM(masm) masm->
2357 #endif 2361 #endif
2358 2362
2359 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ 2363 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_
OLDNEW
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | src/arm64/macro-assembler-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698