1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  * vim: set ts=8 sts=4 et sw=4 tw=99:
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef jit_x64_MacroAssembler_x64_inl_h
8 #define jit_x64_MacroAssembler_x64_inl_h
9 
10 #include "jit/x64/MacroAssembler-x64.h"
11 
12 #include "jit/x86-shared/MacroAssembler-x86-shared-inl.h"
13 
14 namespace js {
15 namespace jit {
16 
17 //{{{ check_macroassembler_style
18 // ===============================================================
19 
20 void
andPtr(Register src,Register dest)21 MacroAssembler::andPtr(Register src, Register dest)
22 {
23     andq(src, dest);
24 }
25 
26 void
andPtr(Imm32 imm,Register dest)27 MacroAssembler::andPtr(Imm32 imm, Register dest)
28 {
29     andq(imm, dest);
30 }
31 
32 void
and64(Imm64 imm,Register64 dest)33 MacroAssembler::and64(Imm64 imm, Register64 dest)
34 {
35     movq(ImmWord(uintptr_t(imm.value)), ScratchReg);
36     andq(ScratchReg, dest.reg);
37 }
38 
39 void
orPtr(Register src,Register dest)40 MacroAssembler::orPtr(Register src, Register dest)
41 {
42     orq(src, dest);
43 }
44 
45 void
orPtr(Imm32 imm,Register dest)46 MacroAssembler::orPtr(Imm32 imm, Register dest)
47 {
48     orq(imm, dest);
49 }
50 
51 void
or64(Register64 src,Register64 dest)52 MacroAssembler::or64(Register64 src, Register64 dest)
53 {
54     orq(src.reg, dest.reg);
55 }
56 
57 void
xor64(Register64 src,Register64 dest)58 MacroAssembler::xor64(Register64 src, Register64 dest)
59 {
60     xorq(src.reg, dest.reg);
61 }
62 
63 void
xorPtr(Register src,Register dest)64 MacroAssembler::xorPtr(Register src, Register dest)
65 {
66     xorq(src, dest);
67 }
68 
69 void
xorPtr(Imm32 imm,Register dest)70 MacroAssembler::xorPtr(Imm32 imm, Register dest)
71 {
72     xorq(imm, dest);
73 }
74 
75 // ===============================================================
76 // Arithmetic functions
77 
78 void
add64(Register64 src,Register64 dest)79 MacroAssembler::add64(Register64 src, Register64 dest)
80 {
81     addq(src.reg, dest.reg);
82 }
83 
84 // ===============================================================
85 // Shift functions
86 
87 void
lshiftPtr(Imm32 imm,Register dest)88 MacroAssembler::lshiftPtr(Imm32 imm, Register dest)
89 {
90     shlq(imm, dest);
91 }
92 
93 void
lshift64(Imm32 imm,Register64 dest)94 MacroAssembler::lshift64(Imm32 imm, Register64 dest)
95 {
96     shlq(imm, dest.reg);
97 }
98 
99 void
rshiftPtr(Imm32 imm,Register dest)100 MacroAssembler::rshiftPtr(Imm32 imm, Register dest)
101 {
102     shrq(imm, dest);
103 }
104 
105 void
rshiftPtrArithmetic(Imm32 imm,Register dest)106 MacroAssembler::rshiftPtrArithmetic(Imm32 imm, Register dest)
107 {
108     sarq(imm, dest);
109 }
110 
111 void
rshift64(Imm32 imm,Register64 dest)112 MacroAssembler::rshift64(Imm32 imm, Register64 dest)
113 {
114     shrq(imm, dest.reg);
115 }
116 
117 //}}} check_macroassembler_style
118 // ===============================================================
119 
120 } // namespace jit
121 } // namespace js
122 
123 #endif /* jit_x64_MacroAssembler_x64_inl_h */
124