comparison src/cpu/x86/vm/assembler_x86.hpp @ 362:f8199438385b

Merge
author apetrusenko
date Wed, 17 Sep 2008 16:49:18 +0400
parents src/cpu/x86/vm/assembler_x86_32.hpp@1ee8caae33af src/cpu/x86/vm/assembler_x86_32.hpp@dc7f315e41f7
children 2649e5276dd7
comparison
equal deleted inserted replaced
316:5fa96a5a7e76 362:f8199438385b
225 "inconsistent address"); 225 "inconsistent address");
226 } 226 }
227 #endif // ASSERT 227 #endif // ASSERT
228 228
229 // accessors 229 // accessors
230 bool uses(Register reg) const { 230 bool uses(Register reg) const { return _base == reg || _index == reg; }
231 return _base == reg || _index == reg; 231 Register base() const { return _base; }
232 } 232 Register index() const { return _index; }
233 ScaleFactor scale() const { return _scale; }
234 int disp() const { return _disp; }
233 235
234 // Convert the raw encoding form into the form expected by the constructor for 236 // Convert the raw encoding form into the form expected by the constructor for
235 // Address. An index of 4 (rsp) corresponds to having no index, so convert 237 // Address. An index of 4 (rsp) corresponds to having no index, so convert
236 // that to noreg for the Address constructor. 238 // that to noreg for the Address constructor.
237 static Address make_raw(int base, int index, int scale, int disp); 239 static Address make_raw(int base, int index, int scale, int disp);
1308 // 1310 //
1309 // Instructions for which a 'better' code sequence exists depending 1311 // Instructions for which a 'better' code sequence exists depending
1310 // on arguments should also go in here. 1312 // on arguments should also go in here.
1311 1313
1312 class MacroAssembler: public Assembler { 1314 class MacroAssembler: public Assembler {
1313 friend class LIR_Assembler; 1315 friend class LIR_Assembler;
1316 friend class Runtime1; // as_Address()
1314 protected: 1317 protected:
1315 1318
1316 Address as_Address(AddressLiteral adr); 1319 Address as_Address(AddressLiteral adr);
1317 Address as_Address(ArrayAddress adr); 1320 Address as_Address(ArrayAddress adr);
1318 1321
1450 void leave(); 1453 void leave();
1451 1454
1452 // Support for getting the JavaThread pointer (i.e.; a reference to thread-local information) 1455 // Support for getting the JavaThread pointer (i.e.; a reference to thread-local information)
1453 // The pointer will be loaded into the thread register. 1456 // The pointer will be loaded into the thread register.
1454 void get_thread(Register thread); 1457 void get_thread(Register thread);
1458
1455 1459
1456 // Support for VM calls 1460 // Support for VM calls
1457 // 1461 //
1458 // It is imperative that all calls into the VM are handled via the call_VM macros. 1462 // It is imperative that all calls into the VM are handled via the call_VM macros.
1459 // They make sure that the stack linkage is setup correctly. call_VM's correspond 1463 // They make sure that the stack linkage is setup correctly. call_VM's correspond
1525 1529
1526 // Stores 1530 // Stores
1527 void store_check(Register obj); // store check for obj - register is destroyed afterwards 1531 void store_check(Register obj); // store check for obj - register is destroyed afterwards
1528 void store_check(Register obj, Address dst); // same as above, dst is exact store location (reg. is destroyed) 1532 void store_check(Register obj, Address dst); // same as above, dst is exact store location (reg. is destroyed)
1529 1533
1534 void g1_write_barrier_pre(Register obj,
1535 #ifndef _LP64
1536 Register thread,
1537 #endif
1538 Register tmp,
1539 Register tmp2,
1540 bool tosca_live);
1541 void g1_write_barrier_post(Register store_addr,
1542 Register new_val,
1543 #ifndef _LP64
1544 Register thread,
1545 #endif
1546 Register tmp,
1547 Register tmp2);
1548
1549
1530 // split store_check(Register obj) to enhance instruction interleaving 1550 // split store_check(Register obj) to enhance instruction interleaving
1531 void store_check_part_1(Register obj); 1551 void store_check_part_1(Register obj);
1532 void store_check_part_2(Register obj); 1552 void store_check_part_2(Register obj);
1533 1553
1534 // C 'boolean' to Java boolean: x == 0 ? 0 : 1 1554 // C 'boolean' to Java boolean: x == 0 ? 0 : 1