< prev index next >

src/hotspot/cpu/aarch64/assembler_aarch64.hpp

Print this page

 256   }
 257 
 258   void rf(Register r, int lsb) {
 259     f(r->encoding_nocheck(), lsb + 4, lsb);
 260   }
 261 
 262   // reg|ZR
 263   void zrf(Register r, int lsb) {
 264     f(r->encoding_nocheck() - (r == zr), lsb + 4, lsb);
 265   }
 266 
 267   // reg|SP
 268   void srf(Register r, int lsb) {
 269     f(r == sp ? 31 : r->encoding_nocheck(), lsb + 4, lsb);
 270   }
 271 
 272   void rf(FloatRegister r, int lsb) {
 273     f(r->encoding_nocheck(), lsb + 4, lsb);
 274   }
 275 








 276   unsigned get(int msb = 31, int lsb = 0) {
 277     int nbits = msb - lsb + 1;
 278     unsigned mask = ((1U << nbits) - 1) << lsb;
 279     assert_cond((bits & mask) == mask);
 280     return (insn & mask) >> lsb;
 281   }
 282 
 283   void fixed(unsigned value, unsigned mask) {
 284     assert_cond ((mask & bits) == 0);
 285 #ifdef ASSERT
 286     bits |= mask;
 287 #endif
 288     insn |= value;
 289   }
 290 };
 291 
 292 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
 293 
 294 class PrePost {
 295   int _offset;

 661     current->f(val, msb, lsb);
 662   }
 663   void f(unsigned val, int msb) {
 664     current->f(val, msb, msb);
 665   }
 666   void sf(int64_t val, int msb, int lsb) {
 667     current->sf(val, msb, lsb);
 668   }
 669   void rf(Register reg, int lsb) {
 670     current->rf(reg, lsb);
 671   }
 672   void srf(Register reg, int lsb) {
 673     current->srf(reg, lsb);
 674   }
 675   void zrf(Register reg, int lsb) {
 676     current->zrf(reg, lsb);
 677   }
 678   void rf(FloatRegister reg, int lsb) {
 679     current->rf(reg, lsb);
 680   }






 681   void fixed(unsigned value, unsigned mask) {
 682     current->fixed(value, mask);
 683   }
 684 
 685   void emit() {
 686     emit_long(current->get_insn());
 687     assert_cond(current->get_bits() == 0xffffffff);
 688     current = NULL;
 689   }
 690 
 691   typedef void (Assembler::* uncond_branch_insn)(address dest);
 692   typedef void (Assembler::* compare_and_branch_insn)(Register Rt, address dest);
 693   typedef void (Assembler::* test_and_branch_insn)(Register Rt, int bitpos, address dest);
 694   typedef void (Assembler::* prefetch_insn)(address target, prfop);
 695 
 696   void wrap_label(Label &L, uncond_branch_insn insn);
 697   void wrap_label(Register r, Label &L, compare_and_branch_insn insn);
 698   void wrap_label(Register r, int bitpos, Label &L, test_and_branch_insn insn);
 699   void wrap_label(Label &L, prfop, prefetch_insn insn);
 700 

 256   }
 257 
 258   void rf(Register r, int lsb) {
 259     f(r->encoding_nocheck(), lsb + 4, lsb);
 260   }
 261 
 262   // reg|ZR
 263   void zrf(Register r, int lsb) {
 264     f(r->encoding_nocheck() - (r == zr), lsb + 4, lsb);
 265   }
 266 
 267   // reg|SP
 268   void srf(Register r, int lsb) {
 269     f(r == sp ? 31 : r->encoding_nocheck(), lsb + 4, lsb);
 270   }
 271 
 272   void rf(FloatRegister r, int lsb) {
 273     f(r->encoding_nocheck(), lsb + 4, lsb);
 274   }
 275 
 276   void prf(PRegister r, int lsb) {
 277     f(r->encoding_nocheck(), lsb + 3, lsb);
 278   }
 279 
 280   void pgrf(PRegister r, int lsb) {
 281     f(r->encoding_nocheck(), lsb + 2, lsb);
 282   }
 283 
 284   unsigned get(int msb = 31, int lsb = 0) {
 285     int nbits = msb - lsb + 1;
 286     unsigned mask = ((1U << nbits) - 1) << lsb;
 287     assert_cond((bits & mask) == mask);
 288     return (insn & mask) >> lsb;
 289   }
 290 
 291   void fixed(unsigned value, unsigned mask) {
 292     assert_cond ((mask & bits) == 0);
 293 #ifdef ASSERT
 294     bits |= mask;
 295 #endif
 296     insn |= value;
 297   }
 298 };
 299 
 300 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
 301 
 302 class PrePost {
 303   int _offset;

 669     current->f(val, msb, lsb);
 670   }
 671   void f(unsigned val, int msb) {
 672     current->f(val, msb, msb);
 673   }
 674   void sf(int64_t val, int msb, int lsb) {
 675     current->sf(val, msb, lsb);
 676   }
 677   void rf(Register reg, int lsb) {
 678     current->rf(reg, lsb);
 679   }
 680   void srf(Register reg, int lsb) {
 681     current->srf(reg, lsb);
 682   }
 683   void zrf(Register reg, int lsb) {
 684     current->zrf(reg, lsb);
 685   }
 686   void rf(FloatRegister reg, int lsb) {
 687     current->rf(reg, lsb);
 688   }
 689   void prf(PRegister reg, int lsb) {
 690     current->prf(reg, lsb);
 691   }
 692   void pgrf(PRegister reg, int lsb) {
 693     current->pgrf(reg, lsb);
 694   }
 695   void fixed(unsigned value, unsigned mask) {
 696     current->fixed(value, mask);
 697   }
 698 
 699   void emit() {
 700     emit_long(current->get_insn());
 701     assert_cond(current->get_bits() == 0xffffffff);
 702     current = NULL;
 703   }
 704 
 705   typedef void (Assembler::* uncond_branch_insn)(address dest);
 706   typedef void (Assembler::* compare_and_branch_insn)(Register Rt, address dest);
 707   typedef void (Assembler::* test_and_branch_insn)(Register Rt, int bitpos, address dest);
 708   typedef void (Assembler::* prefetch_insn)(address target, prfop);
 709 
 710   void wrap_label(Label &L, uncond_branch_insn insn);
 711   void wrap_label(Register r, Label &L, compare_and_branch_insn insn);
 712   void wrap_label(Register r, int bitpos, Label &L, test_and_branch_insn insn);
 713   void wrap_label(Label &L, prfop, prefetch_insn insn);
 714 
< prev index next >