141 #else |
141 #else |
142 inline void Assembler::ld( Register s1, Register s2, Register d) { lduw( s1, s2, d); } |
142 inline void Assembler::ld( Register s1, Register s2, Register d) { lduw( s1, s2, d); } |
143 inline void Assembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); } |
143 inline void Assembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); } |
144 #endif |
144 #endif |
145 |
145 |
146 inline void Assembler::ldub( Register s1, RegisterConstant s2, Register d) { |
146 inline void Assembler::ldub( Register s1, RegisterOrConstant s2, Register d) { |
147 if (s2.is_register()) ldsb(s1, s2.as_register(), d); |
147 if (s2.is_register()) ldsb(s1, s2.as_register(), d); |
148 else ldsb(s1, s2.as_constant(), d); |
148 else ldsb(s1, s2.as_constant(), d); |
149 } |
149 } |
150 inline void Assembler::ldsb( Register s1, RegisterConstant s2, Register d) { |
150 inline void Assembler::ldsb( Register s1, RegisterOrConstant s2, Register d) { |
151 if (s2.is_register()) ldsb(s1, s2.as_register(), d); |
151 if (s2.is_register()) ldsb(s1, s2.as_register(), d); |
152 else ldsb(s1, s2.as_constant(), d); |
152 else ldsb(s1, s2.as_constant(), d); |
153 } |
153 } |
154 inline void Assembler::lduh( Register s1, RegisterConstant s2, Register d) { |
154 inline void Assembler::lduh( Register s1, RegisterOrConstant s2, Register d) { |
155 if (s2.is_register()) ldsh(s1, s2.as_register(), d); |
155 if (s2.is_register()) ldsh(s1, s2.as_register(), d); |
156 else ldsh(s1, s2.as_constant(), d); |
156 else ldsh(s1, s2.as_constant(), d); |
157 } |
157 } |
158 inline void Assembler::ldsh( Register s1, RegisterConstant s2, Register d) { |
158 inline void Assembler::ldsh( Register s1, RegisterOrConstant s2, Register d) { |
159 if (s2.is_register()) ldsh(s1, s2.as_register(), d); |
159 if (s2.is_register()) ldsh(s1, s2.as_register(), d); |
160 else ldsh(s1, s2.as_constant(), d); |
160 else ldsh(s1, s2.as_constant(), d); |
161 } |
161 } |
162 inline void Assembler::lduw( Register s1, RegisterConstant s2, Register d) { |
162 inline void Assembler::lduw( Register s1, RegisterOrConstant s2, Register d) { |
163 if (s2.is_register()) ldsw(s1, s2.as_register(), d); |
163 if (s2.is_register()) ldsw(s1, s2.as_register(), d); |
164 else ldsw(s1, s2.as_constant(), d); |
164 else ldsw(s1, s2.as_constant(), d); |
165 } |
165 } |
166 inline void Assembler::ldsw( Register s1, RegisterConstant s2, Register d) { |
166 inline void Assembler::ldsw( Register s1, RegisterOrConstant s2, Register d) { |
167 if (s2.is_register()) ldsw(s1, s2.as_register(), d); |
167 if (s2.is_register()) ldsw(s1, s2.as_register(), d); |
168 else ldsw(s1, s2.as_constant(), d); |
168 else ldsw(s1, s2.as_constant(), d); |
169 } |
169 } |
170 inline void Assembler::ldx( Register s1, RegisterConstant s2, Register d) { |
170 inline void Assembler::ldx( Register s1, RegisterOrConstant s2, Register d) { |
171 if (s2.is_register()) ldx(s1, s2.as_register(), d); |
171 if (s2.is_register()) ldx(s1, s2.as_register(), d); |
172 else ldx(s1, s2.as_constant(), d); |
172 else ldx(s1, s2.as_constant(), d); |
173 } |
173 } |
174 inline void Assembler::ld( Register s1, RegisterConstant s2, Register d) { |
174 inline void Assembler::ld( Register s1, RegisterOrConstant s2, Register d) { |
175 if (s2.is_register()) ld(s1, s2.as_register(), d); |
175 if (s2.is_register()) ld(s1, s2.as_register(), d); |
176 else ld(s1, s2.as_constant(), d); |
176 else ld(s1, s2.as_constant(), d); |
177 } |
177 } |
178 inline void Assembler::ldd( Register s1, RegisterConstant s2, Register d) { |
178 inline void Assembler::ldd( Register s1, RegisterOrConstant s2, Register d) { |
179 if (s2.is_register()) ldd(s1, s2.as_register(), d); |
179 if (s2.is_register()) ldd(s1, s2.as_register(), d); |
180 else ldd(s1, s2.as_constant(), d); |
180 else ldd(s1, s2.as_constant(), d); |
181 } |
181 } |
182 |
182 |
183 // form effective addresses this way: |
183 // form effective addresses this way: |
184 inline void Assembler::add( Register s1, RegisterConstant s2, Register d, int offset) { |
184 inline void Assembler::add( Register s1, RegisterOrConstant s2, Register d, int offset) { |
185 if (s2.is_register()) add(s1, s2.as_register(), d); |
185 if (s2.is_register()) add(s1, s2.as_register(), d); |
186 else { add(s1, s2.as_constant() + offset, d); offset = 0; } |
186 else { add(s1, s2.as_constant() + offset, d); offset = 0; } |
187 if (offset != 0) add(d, offset, d); |
187 if (offset != 0) add(d, offset, d); |
188 } |
188 } |
189 |
189 |
241 inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); } |
241 inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); } |
242 |
242 |
243 inline void Assembler::st( Register d, Register s1, Register s2) { stw(d, s1, s2); } |
243 inline void Assembler::st( Register d, Register s1, Register s2) { stw(d, s1, s2); } |
244 inline void Assembler::st( Register d, Register s1, int simm13a) { stw(d, s1, simm13a); } |
244 inline void Assembler::st( Register d, Register s1, int simm13a) { stw(d, s1, simm13a); } |
245 |
245 |
246 inline void Assembler::stb( Register d, Register s1, RegisterConstant s2) { |
246 inline void Assembler::stb( Register d, Register s1, RegisterOrConstant s2) { |
247 if (s2.is_register()) stb(d, s1, s2.as_register()); |
247 if (s2.is_register()) stb(d, s1, s2.as_register()); |
248 else stb(d, s1, s2.as_constant()); |
248 else stb(d, s1, s2.as_constant()); |
249 } |
249 } |
250 inline void Assembler::sth( Register d, Register s1, RegisterConstant s2) { |
250 inline void Assembler::sth( Register d, Register s1, RegisterOrConstant s2) { |
251 if (s2.is_register()) sth(d, s1, s2.as_register()); |
251 if (s2.is_register()) sth(d, s1, s2.as_register()); |
252 else sth(d, s1, s2.as_constant()); |
252 else sth(d, s1, s2.as_constant()); |
253 } |
253 } |
254 inline void Assembler::stx( Register d, Register s1, RegisterConstant s2) { |
254 inline void Assembler::stx( Register d, Register s1, RegisterOrConstant s2) { |
255 if (s2.is_register()) stx(d, s1, s2.as_register()); |
255 if (s2.is_register()) stx(d, s1, s2.as_register()); |
256 else stx(d, s1, s2.as_constant()); |
256 else stx(d, s1, s2.as_constant()); |
257 } |
257 } |
258 inline void Assembler::std( Register d, Register s1, RegisterConstant s2) { |
258 inline void Assembler::std( Register d, Register s1, RegisterOrConstant s2) { |
259 if (s2.is_register()) std(d, s1, s2.as_register()); |
259 if (s2.is_register()) std(d, s1, s2.as_register()); |
260 else std(d, s1, s2.as_constant()); |
260 else std(d, s1, s2.as_constant()); |
261 } |
261 } |
262 inline void Assembler::st( Register d, Register s1, RegisterConstant s2) { |
262 inline void Assembler::st( Register d, Register s1, RegisterOrConstant s2) { |
263 if (s2.is_register()) st(d, s1, s2.as_register()); |
263 if (s2.is_register()) st(d, s1, s2.as_register()); |
264 else st(d, s1, s2.as_constant()); |
264 else st(d, s1, s2.as_constant()); |
265 } |
265 } |
266 |
266 |
267 inline void Assembler::stb( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stb( d, a.base(), a.disp() + offset); } |
267 inline void Assembler::stb( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stb( d, a.base(), a.disp() + offset); } |