예제 #1
0
파일: iterators.py 프로젝트: unazed/corepy
def TestRange():

  prgm = synppc.Program()
  code = prgm.get_stream()
  prgm.add(code)
  ppc.set_active_code(code)
  
  a = vars.UnsignedWord(0)

  for i in syn_range(code, 7):
    a.v = a + 1

  for i in syn_range(code, 20, 31):
    a.v = a + 1

  for i in syn_range(code, 20, 26, 2):
    a.v = a + 1
  
  util.return_var( a)
  #a.release_register(code)

  proc = synppc.Processor()
  r = proc.execute(prgm)

  # print 'should be 21:', r
  assert(r == 21)

  return
예제 #2
0
파일: iterators.py 프로젝트: unazed/corepy
def TestIter():

  prgm = synppc.Program()
  code = prgm.get_stream()
  prgm.add(code)

  a = vars.SignedWord(0, code = code)
  
  for i in syn_iter(code, 16, 4):
    a.v = a + 1
 
  for i in syn_iter(code, 16, 4, mode = DEC):
    a.v = a + 1
 
  for i in syn_iter(code, 16, 4, mode = INC):
    a.v = a + 1

  for i in syn_iter(code, 16, 4, mode = INC):
    a.v = a + vars.SignedWord.cast(i)
    
  util.return_var(a)
  #a.release_register(code)
  
  proc = synppc.Processor()
  r = proc.execute(prgm)
  
  # print 'should be 36:', r
  assert(r == 36)
  return
예제 #3
0
def TestRange():

    code = synppc.InstructionStream()
    ppc.set_active_code(code)

    # code.add(ppc.Illegal())

    a = vars.UnsignedWord(0)

    for i in syn_range(code, 7):
        a.v = a + 1

    for i in syn_range(code, 20, 31):
        a.v = a + 1

    for i in syn_range(code, 20, 26, 2):
        a.v = a + 1

    util.return_var(a)
    a.release_register(code)

    proc = synppc.Processor()
    r = proc.execute(code)

    # print 'should be 21:', r
    assert (r == 21)

    return
예제 #4
0
def TestIter():

    code = synppc.InstructionStream()

    # code.add(ppc.Illegal())

    a = vars.SignedWord(0, code=code)

    for i in syn_iter(code, 16, 4):
        a.v = a + 1

    for i in syn_iter(code, 16, 4, mode=DEC):
        a.v = a + 1

    for i in syn_iter(code, 16, 4, mode=INC):
        a.v = a + 1

    for i in syn_iter(code, 16, 4, mode=INC):
        a.v = a + vars.SignedWord.cast(i)

    util.return_var(a)
    a.release_register(code)

    proc = synppc.Processor()
    r = proc.execute(code)

    # print 'should be 36:', r
    assert (r == 36)
    return
예제 #5
0
파일: iterators.py 프로젝트: unazed/corepy
def TestExternalStop():

  prgm = synppc.Program()
  code = prgm.get_stream()
  prgm.add(code)
  ppc.set_active_code(code)
  
  # Data
  data = array.array('d', range(5*5))

  # Constants - read only
  n_rows = vars.SignedWord(5)
  n_cols = vars.SignedWord(5)
  addr   = vars.SignedWord(data.buffer_info()[0])  
  dbl_size  = vars.SignedWord(synppc.WORD_SIZE * 2)
  row_bytes = vars.SignedWord(synppc.WORD_SIZE * 5 * 2)

  # Variables - read/write
  sum = vars.DoubleFloat(0.0)
  x = vars.DoubleFloat(0.0)

  offset = vars.SignedWord(0)

  # Iterators
  i_iter = syn_iter(code, 0, mode = INC)
  i_iter.set_external_stop(n_rows.reg)

  j_ctr = syn_iter(code, 0, mode = CTR)
  j_ctr.set_external_stop(n_cols.reg)

  for i in i_iter:
    offset.v = vars.SignedWord.cast(i) * row_bytes
    
    # Note that j_cnt is unreadable since it's in the ctr register
    for j_cnt in j_ctr:
      # Load the next vaule in the matrix
      ppc.lfdx(x, addr, offset)
      sum.v = vars.fmadd(x, x, sum) # sum += x*x
      offset.v = offset + dbl_size

  # code.add(ppc.Illegal())
  util.return_var(sum)

  proc = synppc.Processor()
  r = proc.execute(prgm, mode = 'fp')
  # print 'Test external stop: ', r
  assert(r == 4900.0)
    
  return
예제 #6
0
def TestZipIter():
    code = synppc.InstructionStream()
    ppc.set_active_code(code)
    # code.add(ppc.Illegal())

    a = array.array('I', range(16, 32))
    b = array.array('I', range(32, 48))
    c = array.array('I', [0 for i in range(16)])

    sum = vars.UnsignedWord(0)

    for i, j, k in zip_iter(code, var_iter(code, a), var_iter(code, b),
                            var_iter(code, c, store_only=True)):
        k.v = i + j
        sum.v = sum + 1

    av = vector_iter(code, array.array('I', range(16)))
    bv = vector_iter(code, array.array('I', range(16, 32)))
    cv = vector_iter(code,
                     array.array('I', [0 for i in range(16)]),
                     store_only=True)

    for i, j, k in zip_iter(code, av, bv, cv):
        k.v = vmx.vadduws.ex(i, j)  # i + j

    util.return_var(sum)

    proc = synppc.Processor()
    r = proc.execute(code)

    assert (r == 16)
    print a
    print b
    print c

    print av.data
    print bv.data
    print cv.data
    print 'TODO: Finish checking TestZipIter values'
    return
예제 #7
0
def TestZipIter():
  prgm = synppc.Program()
  code = prgm.get_stream()
  ppc.set_active_code(code)
  prgm.add(code)

  a = extarray.extarray('I', range(16, 32))
  b = extarray.extarray('I', range(32, 48))
  c = extarray.extarray('I', [0 for i in range(16)])
  
  sum = vars.UnsignedWord(0)

  for i, j, k in zip_iter(code, var_iter(code, a), var_iter(code, b),
                          var_iter(code, c, store_only = True)):
    k.v = i + j 
    sum.v = sum + 1
  
  av = vector_iter(code, extarray.extarray('I', range(16)))
  bv = vector_iter(code, extarray.extarray('I', range(16, 32)))
  cv = vector_iter(code, extarray.extarray('I', [0 for i in range(16)]), store_only = True)

  for i, j, k in zip_iter(code, av, bv, cv):
    k.v = vmx.vadduws.ex(i, j)  # i + j 

  util.return_var(sum)
  
  proc = synppc.Processor()
  r = proc.execute(prgm, mode = 'int')

  assert(r == 16)
  print a
  print b
  print c

  print av.data
  print bv.data
  print cv.data
  print 'TODO: Finish checking TestZipIter values'
  return
예제 #8
0
def TestNestedIter():

    code = synppc.InstructionStream()
    ppc.set_active_code(code)
    # code.add(ppc.Illegal())

    a = vars.UnsignedWord(0)

    for i in syn_iter(code, 5):
        for j in syn_iter(code, 5):
            for k in syn_iter(code, 5):
                a.v = a + i + j + k

    util.return_var(a)
    a.release_register()

    proc = synppc.Processor()
    r = proc.execute(code)

    # print 'should be 750:', r
    assert (r == 750)
    return
예제 #9
0
파일: iterators.py 프로젝트: unazed/corepy
def TestNestedIter():

  prgm = synppc.Program()
  code = prgm.get_stream()
  prgm.add(code)
  ppc.set_active_code(code)

  a = vars.UnsignedWord(0)

  for i in syn_iter(code, 5):
    for j in syn_iter(code, 5):
      for k in syn_iter(code, 5):
        a.v = a + i + j + k
      
  util.return_var(a)
  #a.release_register()

  proc = synppc.Processor()
  r = proc.execute(prgm)

  # print 'should be 750:', r
  assert(r == 750)
  return