1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdio.h>
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdint.h>
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
46090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "private/pixelflinger/ggl_context.h"
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
66090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "buffer.h"
76090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "scanline.h"
86090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
96090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "codeflinger/CodeCache.h"
106090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "codeflinger/GGLAssembler.h"
116090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#include "codeflinger/ARMAssembler.h"
126090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
136090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#if defined(__arm__)
146090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#   define ANDROID_ARM_CODEGEN  1
156090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else
166090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#   define ANDROID_ARM_CODEGEN  0
176090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif
186090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
196090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#define ASSEMBLY_SCRATCH_SIZE   2048
206090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
216090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangusing namespace android;
226090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
236090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangclass ScanlineAssembly : public Assembly {
246090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    AssemblyKey<needs_t> mKey;
256090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangpublic:
266090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    ScanlineAssembly(needs_t needs, size_t size)
276090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang        : Assembly(size), mKey(needs) { }
286090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    const AssemblyKey<needs_t>& key() const { return mKey; }
296090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang};
306090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang
316090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangstatic void ggl_test_codegen(uint32_t n, uint32_t p, uint32_t t0, uint32_t t1)
326090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang{
336090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#if ANDROID_ARM_CODEGEN
346090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    GGLContext* c;
356090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    gglInit(&c);
366090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    needs_t needs;
376090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    needs.n = n;
386090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    needs.p = p;
396090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    needs.t[0] = t0;
406090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    needs.t[1] = t1;
416090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    sp<ScanlineAssembly> a(new ScanlineAssembly(needs, ASSEMBLY_SCRATCH_SIZE));
426090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    GGLAssembler assembler( new ARMAssembler(a) );
436090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    int err = assembler.scanline(needs, (context_t*)c);
446090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    if (err != 0) {
456090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang        printf("error %08x (%s)\n", err, strerror(-err));
466090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    }
476090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    gglUninit(c);
486090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else
496090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang    printf("This test runs only on ARM\n");
506090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif
516090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang}
52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint main(int argc, char** argv)
54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{
55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    if (argc != 2) {
56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        printf("usage: %s 00000117:03454504_00001501_00000000\n", argv[0]);
57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        return 0;
58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    }
59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t n;
60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t p;
61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t t0;
62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    uint32_t t1;
63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    sscanf(argv[1], "%08x:%08x_%08x_%08x", &p, &n, &t0, &t1);
64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    ggl_test_codegen(n, p,  t0, t1);
65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    return 0;
66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
67