Home | History | Annotate | Download | only in codegen
      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