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:
ScanlineAssembly(needs_t needs,size_t size)31 ScanlineAssembly(needs_t needs, size_t size)
32 : Assembly(size), mKey(needs) { }
key() const33 const AssemblyKey<needs_t>& key() const { return mKey; }
34 };
35
ggl_test_codegen(uint32_t n,uint32_t p,uint32_t t0,uint32_t t1)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
main(int argc,char ** argv)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