< prev index next >

src/hotspot/cpu/aarch64/assembler_aarch64.hpp

Print this page

1119     f(op2, 7, 5);
1120     // reading to zr is a mistake
1121     rf(rt, 0);
1122   }
1123 
1124   enum barrier {OSHLD = 0b0001, OSHST, OSH, NSHLD=0b0101, NSHST, NSH,
1125                 ISHLD = 0b1001, ISHST, ISH, LD=0b1101, ST, SY};
1126 
1127   void dsb(barrier imm) {
1128     system(0b00, 0b011, 0b00011, imm, 0b100);
1129   }
1130 
1131   void dmb(barrier imm) {
1132     system(0b00, 0b011, 0b00011, imm, 0b101);
1133   }
1134 
1135   void isb() {
1136     system(0b00, 0b011, 0b00011, SY, 0b110);
1137   }
1138 




1139   void sys(int op1, int CRn, int CRm, int op2,
1140            Register rt = as_Register(0b11111)) {
1141     system(0b01, op1, CRn, CRm, op2, rt);
1142   }
1143 
1144   // Only implement operations accessible from EL0 or higher, i.e.,
1145   //            op1    CRn    CRm    op2
1146   // IC IVAU     3      7      5      1
1147   // DC CVAC     3      7      10     1
1148   // DC CVAP     3      7      12     1
1149   // DC CVAU     3      7      11     1
1150   // DC CIVAC    3      7      14     1
1151   // DC ZVA      3      7      4      1
1152   // So only deal with the CRm field.
1153   enum icache_maintenance {IVAU = 0b0101};
1154   enum dcache_maintenance {CVAC = 0b1010, CVAP = 0b1100, CVAU = 0b1011, CIVAC = 0b1110, ZVA = 0b100};
1155 
1156   void dc(dcache_maintenance cm, Register Rt) {
1157     sys(0b011, 0b0111, cm, 0b001, Rt);
1158   }

1119     f(op2, 7, 5);
1120     // reading to zr is a mistake
1121     rf(rt, 0);
1122   }
1123 
1124   enum barrier {OSHLD = 0b0001, OSHST, OSH, NSHLD=0b0101, NSHST, NSH,
1125                 ISHLD = 0b1001, ISHST, ISH, LD=0b1101, ST, SY};
1126 
1127   void dsb(barrier imm) {
1128     system(0b00, 0b011, 0b00011, imm, 0b100);
1129   }
1130 
1131   void dmb(barrier imm) {
1132     system(0b00, 0b011, 0b00011, imm, 0b101);
1133   }
1134 
1135   void isb() {
1136     system(0b00, 0b011, 0b00011, SY, 0b110);
1137   }
1138 
1139   void sb() {
1140     system(0b00, 0b011, 0b00011, 0b0000, 0b111);
1141   }
1142 
1143   void sys(int op1, int CRn, int CRm, int op2,
1144            Register rt = as_Register(0b11111)) {
1145     system(0b01, op1, CRn, CRm, op2, rt);
1146   }
1147 
1148   // Only implement operations accessible from EL0 or higher, i.e.,
1149   //            op1    CRn    CRm    op2
1150   // IC IVAU     3      7      5      1
1151   // DC CVAC     3      7      10     1
1152   // DC CVAP     3      7      12     1
1153   // DC CVAU     3      7      11     1
1154   // DC CIVAC    3      7      14     1
1155   // DC ZVA      3      7      4      1
1156   // So only deal with the CRm field.
1157   enum icache_maintenance {IVAU = 0b0101};
1158   enum dcache_maintenance {CVAC = 0b1010, CVAP = 0b1100, CVAU = 0b1011, CIVAC = 0b1110, ZVA = 0b100};
1159 
1160   void dc(dcache_maintenance cm, Register Rt) {
1161     sys(0b011, 0b0111, cm, 0b001, Rt);
1162   }
< prev index next >