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