def ensure_reg_or_pool(self, box): if isinstance(box, Const): offset = self.assembler.pool.get_offset(box) return l.pool(offset, float=True) else: assert box in self.temp_boxes loc = self.make_sure_var_in_reg(box, forbidden_vars=self.temp_boxes) return loc
def load_imm(self, dest_reg, word): if -2**15 <= word <= 2**15 - 1: self.LGHI(dest_reg, l.imm(word)) elif -2**31 <= word <= 2**31 - 1: self.LGFI(dest_reg, l.imm(word)) else: if self.pool and self.pool.contains_constant(word): self.LG(dest_reg, l.pool(self.pool.get_direct_offset(word))) return self.IILF(dest_reg, l.imm(word & 0xFFFFffff)) self.IIHF(dest_reg, l.imm((word >> 32) & 0xFFFFffff))
def load_imm(self, dest_reg, word): if -2 ** 15 <= word <= 2 ** 15 - 1: self.LGHI(dest_reg, l.imm(word)) elif -2 ** 31 <= word <= 2 ** 31 - 1: self.LGFI(dest_reg, l.imm(word)) else: if self.pool and self.pool.contains_constant(word): self.LG(dest_reg, l.pool(self.pool.get_direct_offset(word))) return self.IILF(dest_reg, l.imm(word & 0xFFFFFFFF)) self.IIHF(dest_reg, l.imm((word >> 32) & 0xFFFFFFFF))
def ensure_reg(self, box): if isinstance(box, Const): offset = self.assembler.pool.get_offset(box) poolloc = l.pool(offset, float=True) reg = self.get_scratch_reg() if poolloc.displace <= 2**11-1: self.assembler.mc.LD(reg, poolloc) else: self.assembler.mc.LDY(reg, poolloc) return reg else: assert box in self.temp_boxes loc = self.make_sure_var_in_reg(box, forbidden_vars=self.temp_boxes) return loc
def ensure_reg(self, box): if isinstance(box, Const): offset = self.assembler.pool.get_offset(box) poolloc = l.pool(offset, float=True) reg = self.get_scratch_reg() if poolloc.displace <= 2**11 - 1: self.assembler.mc.LD(reg, poolloc) else: self.assembler.mc.LDY(reg, poolloc) return reg else: assert box in self.temp_boxes loc = self.make_sure_var_in_reg(box, forbidden_vars=self.temp_boxes) return loc
def convert_to_imm(self, c): return l.pool(self.assembler.pool.get_offset(c), float=True)
def convert_to_imm(self, c): if self.assembler.pool.contains_box(c): return l.pool(self.assembler.pool.get_offset(c)) immvalue = self.convert_to_int(c) return l.imm(immvalue)