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
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
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
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
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
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
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
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
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