コード例 #1
0
 def execute(self, processor):
     if processor.condition_passed():
         try:
             processor.null_check_if_thumbee(self.n)
         except EndOfInstruction:
             pass
         else:
             offset_addr = bits_add(processor.registers.get(
                 self.n), self.imm32, 32) if self.add else bits_sub(
                     processor.registers.get(self.n), self.imm32, 32)
             address = offset_addr if self.index else processor.registers.get(
                 self.n)
             if have_lpae() and substring(address, 2, 0) == 0b000:
                 data = processor.mem_a_get(address, 8)
                 if processor.big_endian():
                     processor.registers.set(self.t,
                                             substring(data, 63, 32))
                     processor.registers.set(self.t2,
                                             substring(data, 31, 0))
                 else:
                     processor.registers.set(self.t, substring(data, 31, 0))
                     processor.registers.set(self.t2,
                                             substring(data, 63, 32))
             else:
                 processor.registers.set(self.t,
                                         processor.mem_a_get(address, 4))
                 processor.registers.set(
                     self.t2,
                     processor.mem_a_get(bits_add(address, 4, 32), 4))
             if self.wback:
                 processor.registers.set(self.n, offset_addr)
コード例 #2
0
ファイル: ldrd_literal.py プロジェクト: doronz88/armulator
 def execute(self, processor):
     if processor.condition_passed():
         try:
             processor.null_check_if_thumbee(15)
         except EndOfInstruction:
             pass
         else:
             address = bits_add(align(processor.registers.get_pc(), 4),
                                self.imm32, 32) if self.add else bits_sub(
                                    align(processor.registers.get_pc(), 4),
                                    self.imm32, 32)
             if have_lpae() and address[29:32] == "0b000":
                 data = processor.mem_a_get(address, 8)
                 if processor.big_endian():
                     processor.registers.set(self.t, data[0:32])
                     processor.registers.set(self.t2, data[32:64])
                 else:
                     processor.registers.set(self.t, data[32:64])
                     processor.registers.set(self.t2, data[0:32])
             else:
                 processor.registers.set(self.t,
                                         processor.mem_a_get(address, 4))
                 processor.registers.set(
                     self.t2,
                     processor.mem_a_get(
                         bits_add(address, BitArray(bin="0b100"), 32), 4))
コード例 #3
0
ファイル: strd_immediate.py プロジェクト: matan1008/armulator
 def execute(self, processor):
     if processor.condition_passed():
         try:
             processor.null_check_if_thumbee(self.n)
         except EndOfInstruction:
             pass
         else:
             offset_addr = bits_add(processor.registers.get(
                 self.n), self.imm32, 32) if self.add else bits_sub(
                     processor.registers.get(self.n), self.imm32, 32)
             address = offset_addr if self.index else processor.registers.get(
                 self.n)
             if have_lpae() and lower_chunk(address, 3) == 0b000:
                 if processor.big_endian():
                     data = chain(processor.registers.get(self.t),
                                  processor.registers.get(self.t2), 32)
                 else:
                     data = chain(processor.registers.get(self.t2),
                                  processor.registers.get(self.t), 32)
                 processor.mem_a_set(address, 8, data)
             else:
                 processor.mem_a_set(address, 4,
                                     processor.registers.get(self.t))
                 processor.mem_a_set(bits_add(address, 4, 32), 4,
                                     processor.registers.get(self.t2))
             if self.wback:
                 processor.registers.set(self.n, offset_addr)
コード例 #4
0
ファイル: strd_register.py プロジェクト: matan1008/armulator
 def execute(self, processor):
     if processor.condition_passed():
         offset_addr = bits_add(processor.registers.get(self.n),
                                processor.registers.get(self.m),
                                32) if self.add else bits_sub(
                                    processor.registers.get(self.n),
                                    processor.registers.get(self.m), 32)
         address = offset_addr if self.index else processor.registers.get(
             self.n)
         if have_lpae() and substring(address, 2, 0) == 0b000:
             if processor.big_endian():
                 data = chain(processor.registers.get(self.t),
                              processor.registers.get(self.t2), 32)
             else:
                 data = chain(processor.registers.get(self.t2),
                              processor.registers.get(self.t), 32)
             processor.mem_a_set(address, 8, data)
         else:
             processor.mem_a_set(address, 4,
                                 processor.registers.get(self.t))
             processor.mem_a_set(bits_add(address, 4, 32), 4,
                                 processor.registers.get(self.t2))
         if self.wback:
             processor.registers.set(self.n, offset_addr)