Mercurial > hg > graal-compiler
comparison src/cpu/sparc/vm/c1_LIRAssembler_sparc.hpp @ 2002:ac637b7220d1
6985015: C1 needs to support compressed oops
Summary: This change implements compressed oops for C1 for x64 and sparc. The changes are mostly on the codegen level, with a few exceptions when we do access things outside of the heap that are uncompressed from the IR. Compressed oops are now also enabled with tiered.
Reviewed-by: twisti, kvn, never, phh
author | iveresov |
---|---|
date | Tue, 30 Nov 2010 23:23:40 -0800 |
parents | f95d63e2154a |
children | 898522ae3c32 |
comparison
equal
deleted
inserted
replaced
1972:f95d63e2154a | 2002:ac637b7220d1 |
---|---|
38 // When disp <= 13 bits long, a single load or store instruction is emitted with (disp + [d]). | 38 // When disp <= 13 bits long, a single load or store instruction is emitted with (disp + [d]). |
39 // When disp > 13 bits long, code is emitted to set the displacement into the O7 register, | 39 // When disp > 13 bits long, code is emitted to set the displacement into the O7 register, |
40 // and then a load or store is emitted with ([O7] + [d]). | 40 // and then a load or store is emitted with ([O7] + [d]). |
41 // | 41 // |
42 | 42 |
43 // some load/store variants return the code_offset for proper positioning of debug info for null checks | 43 int store(LIR_Opr from_reg, Register base, int offset, BasicType type, bool wide, bool unaligned); |
44 int store(LIR_Opr from_reg, Register base, Register disp, BasicType type, bool wide); | |
44 | 45 |
45 // load/store with 32 bit displacement | 46 int load(Register base, int offset, LIR_Opr to_reg, BasicType type, bool wide, bool unaligned); |
46 int load(Register s, int disp, Register d, BasicType ld_type, CodeEmitInfo* info = NULL); | 47 int load(Register base, Register disp, LIR_Opr to_reg, BasicType type, bool wide); |
47 void store(Register value, Register base, int offset, BasicType type, CodeEmitInfo *info = NULL); | |
48 | |
49 // loadf/storef with 32 bit displacement | |
50 void load(Register s, int disp, FloatRegister d, BasicType ld_type, CodeEmitInfo* info = NULL); | |
51 void store(FloatRegister d, Register s1, int disp, BasicType st_type, CodeEmitInfo* info = NULL); | |
52 | |
53 // convienence methods for calling load/store with an Address | |
54 void load(const Address& a, Register d, BasicType ld_type, CodeEmitInfo* info = NULL, int offset = 0); | |
55 void store(Register d, const Address& a, BasicType st_type, CodeEmitInfo* info = NULL, int offset = 0); | |
56 void load(const Address& a, FloatRegister d, BasicType ld_type, CodeEmitInfo* info = NULL, int offset = 0); | |
57 void store(FloatRegister d, const Address& a, BasicType st_type, CodeEmitInfo* info = NULL, int offset = 0); | |
58 | |
59 // convienence methods for calling load/store with an LIR_Address | |
60 void load(LIR_Address* a, Register d, BasicType ld_type, CodeEmitInfo* info = NULL); | |
61 void store(Register d, LIR_Address* a, BasicType st_type, CodeEmitInfo* info = NULL); | |
62 void load(LIR_Address* a, FloatRegister d, BasicType ld_type, CodeEmitInfo* info = NULL); | |
63 void store(FloatRegister d, LIR_Address* a, BasicType st_type, CodeEmitInfo* info = NULL); | |
64 | |
65 int store(LIR_Opr from_reg, Register base, int offset, BasicType type, bool unaligned = false); | |
66 int store(LIR_Opr from_reg, Register base, Register disp, BasicType type); | |
67 | |
68 int load(Register base, int offset, LIR_Opr to_reg, BasicType type, bool unaligned = false); | |
69 int load(Register base, Register disp, LIR_Opr to_reg, BasicType type); | |
70 | 48 |
71 void monitorexit(LIR_Opr obj_opr, LIR_Opr lock_opr, Register hdr, int monitor_no); | 49 void monitorexit(LIR_Opr obj_opr, LIR_Opr lock_opr, Register hdr, int monitor_no); |
72 | 50 |
73 int shift_amount(BasicType t); | 51 int shift_amount(BasicType t); |
74 | 52 |