From f18110749587d8ed46771686b15c223e3606b393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandro=20S=C3=A1nchez=20Bach?= Date: Mon, 3 Mar 2014 03:06:10 +0100 Subject: [PATCH] Test added: cpu/ppu_vpu --- tests/cpu/ppu_vpu/ppu_vpu.c | 123 +++++++++++++++++++++++++++++ tests/cpu/ppu_vpu/ppu_vpu.ppu.self | Bin 0 -> 87704 bytes 2 files changed, 123 insertions(+) create mode 100644 tests/cpu/ppu_vpu/ppu_vpu.c create mode 100644 tests/cpu/ppu_vpu/ppu_vpu.ppu.self diff --git a/tests/cpu/ppu_vpu/ppu_vpu.c b/tests/cpu/ppu_vpu/ppu_vpu.c new file mode 100644 index 0000000..8f89b99 --- /dev/null +++ b/tests/cpu/ppu_vpu/ppu_vpu.c @@ -0,0 +1,123 @@ +#include +#include +#include +#include + +#define SHOW_RESULTS(v0) printf("%08x %08x %08x %08x\n", *(int*)&v0[0], *(int*)&v0[1], *(int*)&v0[2], *(int*)&v0[3]); + +int testInts[] = { + 0, 1, 2, 3, 4, -1, -2, -3, -4, + 0x00033333, 0x00fffff0, 0x10000000, 0x12345678, + 0x1fffffff, 0x42385722, 0x70000000, 0x72233411, + 0x7fffffff, 0x80000000, 0x80000001, 0x8fffffff, +}; + +float testFloats[] = { + 0.0, -0.0, 1.0, -1.0, 1.5, -1.5, + 1.6, -1.6, 1.4, -1.4, 2.0, -2.0, + 4.0, -10000000.4, 20000000.0, -20000.5, 20000.6, + FLT_MIN, FLT_MAX, INFINITY, -INFINITY, NAN, +}; + +int main(void) +{ + ///////////////////////////////// + // VECTOR INTEGER INSTRUCTIONS // + ///////////////////////////////// + + // TODO + + //////////////////////////////////////// + // VECTOR FLOATING-POINT INSTRUCTIONS // + //////////////////////////////////////// + + // Input arguments: 1 vec_float4, (1 UIMM) + for (unsigned int i=0; i ", i); SHOW_RESULTS(vec_vrfin(v1)); + printf("vec_vrfiz ([%02d]) -> ", i); SHOW_RESULTS(vec_vrfiz(v1)); + printf("vec_vrfip ([%02d]) -> ", i); SHOW_RESULTS(vec_vrfip(v1)); + printf("vec_vrfim ([%02d]) -> ", i); SHOW_RESULTS(vec_vrfim(v1)); + printf("vec_vctuxs ([%02d], 0) -> ", i); SHOW_RESULTS(vec_vctuxs(v1, 0)); + printf("vec_vctsxs ([%02d], 0) -> ", i); SHOW_RESULTS(vec_vctsxs(v1, 0)); + printf("vec_vctuxs ([%02d], 1) -> ", i); SHOW_RESULTS(vec_vctuxs(v1, 1)); + printf("vec_vctsxs ([%02d], 1) -> ", i); SHOW_RESULTS(vec_vctsxs(v1, 1)); + printf("vec_vctuxs ([%02d], 2) -> ", i); SHOW_RESULTS(vec_vctuxs(v1, 2)); + printf("vec_vctsxs ([%02d], 2) -> ", i); SHOW_RESULTS(vec_vctsxs(v1, 2)); + printf("vec_vctuxs ([%02d],31) -> ", i); SHOW_RESULTS(vec_vctuxs(v1, 31)); + printf("vec_vctsxs ([%02d],31) -> ", i); SHOW_RESULTS(vec_vctsxs(v1, 31)); + + // Vector Floating-Point Estimate Instructions + printf("vec_vrefp ([%02d]) -> ", i); SHOW_RESULTS(vec_vrefp(v1)); + printf("vec_vrsqrtefp ([%02d]) -> ", i); SHOW_RESULTS(vec_vrsqrtefp(v1)); + printf("vec_vlogefp ([%02d]) -> ", i); SHOW_RESULTS(vec_vlogefp(v1)); + printf("vec_vexptefp ([%02d]) -> ", i); SHOW_RESULTS(vec_vexptefp(v1)); + } + + // Input arguments: 1 vec_(u)int4, 1 UIMM + for (unsigned int i=0; i ", i); SHOW_RESULTS(vec_vcfux(v1, 0)); + printf("vec_vcfsx ([%02d], 0) -> ", i); SHOW_RESULTS(vec_vcfsx(v2, 0)); + printf("vec_vcfux ([%02d], 1) -> ", i); SHOW_RESULTS(vec_vcfux(v1, 1)); + printf("vec_vcfsx ([%02d], 1) -> ", i); SHOW_RESULTS(vec_vcfsx(v2, 1)); + printf("vec_vcfux ([%02d], 2) -> ", i); SHOW_RESULTS(vec_vcfux(v1, 2)); + printf("vec_vcfsx ([%02d], 2) -> ", i); SHOW_RESULTS(vec_vcfsx(v2, 2)); + printf("vec_vcfux ([%02d],31) -> ", i); SHOW_RESULTS(vec_vcfux(v1, 31)); + printf("vec_vcfsx ([%02d],31) -> ", i); SHOW_RESULTS(vec_vcfsx(v2, 31)); + } + + // Input arguments: 2 vec_float4 + for (unsigned int i=0; i ", i, j); SHOW_RESULTS(vec_vaddfp(v1,v2)); + printf("vec_vsubfp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vsubfp(v1,v2)); + printf("vec_vminfp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vminfp(v1,v2)); + printf("vec_vmaxfp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vmaxfp(v1,v2)); + + // Vector Floating-Point Compare Instructions + printf("vec_vcmpbfp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vcmpbfp(v1,v2)); + printf("vec_vcmpeqfp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vcmpeqfp(v1,v2)); + printf("vec_vcmpgefp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vcmpgefp(v1,v2)); + printf("vec_vcmpgefp ([%02d],[%02d]) -> ", i, j); SHOW_RESULTS(vec_vcmpgtfp(v1,v2)); + } + } + + // Input arguments: 3 vec_float4 + for (unsigned int i=0; i ", i, j, k); SHOW_RESULTS(vec_vmaddfp(v1,v2,v3)); + printf("vec_vnmsubfp ([%02d],[%02d],[%02d]) -> ", i, j, k); SHOW_RESULTS(vec_vnmsubfp(v1,v2,v3)); + } + } + } + + ////////////////////////////////////// + // VECTOR LOAD & STORE INSTRUCTIONS // + ////////////////////////////////////// + + // TODO + + ////////////////////////////////////////////////// + // VECTOR PERMUTATION & FORMATTING INSTRUCTIONS // + ////////////////////////////////////////////////// + + // TODO + + return 0; +} diff --git a/tests/cpu/ppu_vpu/ppu_vpu.ppu.self b/tests/cpu/ppu_vpu/ppu_vpu.ppu.self new file mode 100644 index 0000000000000000000000000000000000000000..5cb1bdddd676da396aadd93f1103894ec4dbbff2 GIT binary patch literal 87704 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 literal 0 HcmV?d00001