1 #include <stdio.h> 2 #include <stdint.h> 3 4 #include "private/pixelflinger/ggl_context.h" 5 6 #include "buffer.h" 7 #include "scanline.h" 8 9 #include "codeflinger/CodeCache.h" 10 #include "codeflinger/GGLAssembler.h" 11 #include "codeflinger/ARMAssembler.h" 12 #include "codeflinger/MIPSAssembler.h" 13 14 #if defined(__arm__) || defined(__mips__) 15 # define ANDROID_ARM_CODEGEN 1 16 #else 17 # define ANDROID_ARM_CODEGEN 0 18 #endif 19 20 #if defined (__mips__) 21 #define ASSEMBLY_SCRATCH_SIZE 4096 22 #else 23 #define ASSEMBLY_SCRATCH_SIZE 2048 24 #endif 25 26 using namespace android; 27 28 class ScanlineAssembly : public Assembly { 29 AssemblyKey<needs_t> mKey; 30 public: 31 ScanlineAssembly(needs_t needs, size_t size) 32 : Assembly(size), mKey(needs) { } 33 const AssemblyKey<needs_t>& key() const { return mKey; } 34 }; 35 36 static void ggl_test_codegen(uint32_t n, uint32_t p, uint32_t t0, uint32_t t1) 37 { 38 #if ANDROID_ARM_CODEGEN 39 GGLContext* c; 40 gglInit(&c); 41 needs_t needs; 42 needs.n = n; 43 needs.p = p; 44 needs.t[0] = t0; 45 needs.t[1] = t1; 46 sp<ScanlineAssembly> a(new ScanlineAssembly(needs, ASSEMBLY_SCRATCH_SIZE)); 47 48 #if defined(__arm__) 49 GGLAssembler assembler( new ARMAssembler(a) ); 50 #endif 51 52 #if defined(__mips__) 53 GGLAssembler assembler( new ArmToMipsAssembler(a) ); 54 #endif 55 56 int err = assembler.scanline(needs, (context_t*)c); 57 if (err != 0) { 58 printf("error %08x (%s)\n", err, strerror(-err)); 59 } 60 gglUninit(c); 61 #else 62 printf("This test runs only on ARM or MIPS\n"); 63 #endif 64 } 65 66 int main(int argc, char** argv) 67 { 68 if (argc != 2) { 69 printf("usage: %s 00000117:03454504_00001501_00000000\n", argv[0]); 70 return 0; 71 } 72 uint32_t n; 73 uint32_t p; 74 uint32_t t0; 75 uint32_t t1; 76 sscanf(argv[1], "%08x:%08x_%08x_%08x", &p, &n, &t0, &t1); 77 ggl_test_codegen(n, p, t0, t1); 78 return 0; 79 } 80