Пример #1
0
    def start(self, align=True, branch=True):

        if self.r_count is None:
            self.r_count = self.code.acquire_register()

        if self.mode == CTR and branch:
            if self.step_size() != 1:
                raise Exception(
                    'CTR loops must have step_size of 1, you used ' +
                    str(self.step_size()))

            if self.external_stop:
                self.code.add(ppc.mtctr(self.r_stop))
            else:
                util.load_word(self.code, self.r_count, self.n_steps())
                self.code.add(ppc.mtctr(self.r_count))

            self.code.release_register(self.r_count)
            self.r_count = None

        elif self.mode == DEC:
            util.load_word(self.code, self.r_count, self.get_count())

        elif self.mode == INC:
            if self.r_stop is None and branch:
                self.r_stop = self.code.acquire_register()

            util.load_word(self.code, self.r_count, self.get_start())

            if branch and not self.external_stop:
                util.load_word(self.code, self.r_stop, self.get_count())

        # /end mode if

        if self.r_count is not None:
            # self.current_count = metavar.int_var(self.code, reg = self.r_count)
            self.current_count = vars.UnsignedWord(reg=self.r_count)

        if align and branch:
            # Align the start of the loop on a 16 byte boundary
            while (self.code.size()) % 4 != 0:
                self.code.add(ppc.noop())

        # Label
        self.start_label = self.code.size() + 1

        return
Пример #2
0
  def start(self, align = True, branch = True):

    if self.r_count is None:
      self.r_count = self.code.prgm.acquire_register()
      
    if self.mode == CTR and branch:
      if self.step_size() != 1:
        raise Exception('CTR loops must have step_size of 1, you used ' + str(self.step_size()))

      if self.external_stop:
        self.code.add(ppc.mtctr(self.r_stop))
      else:
        util.load_word(self.code, self.r_count, self.n_steps())
        self.code.add(ppc.mtctr(self.r_count))

      self.code.prgm.release_register(self.r_count)
      self.r_count = None

    elif self.mode == DEC:
      util.load_word(self.code, self.r_count, self.get_count())

    elif self.mode == INC:
      if self.r_stop is None and branch:
        self.r_stop = self.code.prgm.acquire_register()

      util.load_word(self.code, self.r_count, self.get_start())

      if branch and not self.external_stop:
        util.load_word(self.code, self.r_stop, self.get_count())

    # /end mode if

    if self.r_count is not None:
      self.current_count = vars.UnsignedWord(code = self.code, reg = self.r_count)

    if align and branch:
      # Align the start of the loop on a 16 byte boundary
      while (self.code.size()) % 4 != 0:
        self.code.add(ppc.noop())

    # Label
    self.start_label = self.code.prgm.get_unique_label("SYN_ITER_START")
    self.code.add(self.start_label)

    return
Пример #3
0
print 'float result:', r


code.reset()

load_word(code, prgm.gp_return, 0xFFFFFFFF)

r = proc.execute(prgm, mode='int', debug=True)
print "int result:",r
assert(r == -1)


code.reset()

ppc.addi(prgm.gp_return, 0, 16)
ppc.mtctr(prgm.gp_return)
ppc.addi(prgm.gp_return, 0, 0)

lbl_loop = prgm.get_label("LOOP")
code.add(lbl_loop)
ppc.addi(prgm.gp_return, prgm.gp_return, 2)
ppc.bdnz(lbl_loop)

#prgm.print_code(hex = True)
r = proc.execute(prgm, mode='int', debug=True)
print "int result:",r
assert(r == 32)

#sys.exit(0)

# ------------------------------------------------------------
Пример #4
0
r = proc.execute(code, mode='fp', debug=True)
assert (r == 3.14)
print 'float result:', r

code.reset()

load_word(code, code.gp_return, 0xFFFFFFFF)

r = proc.execute(code, mode='int', debug=True)
print "int result:", r
assert (r == -1)

code.reset()

ppc.addi(code.gp_return, 0, 16)
ppc.mtctr(code.gp_return)
ppc.addi(code.gp_return, 0, 0)

lbl_loop = code.get_label("LOOP")
code.add(lbl_loop)
ppc.addi(code.gp_return, code.gp_return, 2)
ppc.bdnz(lbl_loop)

code.print_code(hex=True)
r = proc.execute(code, mode='int', debug=True)
print "int result:", r
assert (r == 32)

sys.exit(0)

# ------------------------------------------------------------
Пример #5
0
r = proc.execute(prgm, mode='fp', debug=True)
assert (r == 3.14)
print 'float result:', r

code.reset()

load_word(code, prgm.gp_return, 0xFFFFFFFF)

r = proc.execute(prgm, mode='int', debug=True)
print "int result:", r
assert (r == -1)

code.reset()

ppc.addi(prgm.gp_return, 0, 16)
ppc.mtctr(prgm.gp_return)
ppc.addi(prgm.gp_return, 0, 0)

lbl_loop = prgm.get_label("LOOP")
code.add(lbl_loop)
ppc.addi(prgm.gp_return, prgm.gp_return, 2)
ppc.bdnz(lbl_loop)

#prgm.print_code(hex = True)
r = proc.execute(prgm, mode='int', debug=True)
print "int result:", r
assert (r == 32)

#sys.exit(0)

# ------------------------------------------------------------