Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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))
Пример #4
0
 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))
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 def convert_to_imm(self, c):
     return l.pool(self.assembler.pool.get_offset(c), float=True)
Пример #8
0
 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)
Пример #9
0
 def convert_to_imm(self, c):
     return l.pool(self.assembler.pool.get_offset(c), float=True)
Пример #10
0
 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)