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" 122bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#include "codeflinger/MIPSAssembler.h" 136090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 142bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined(__arm__) || defined(__mips__) 156090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 1 166090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 176090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 0 186090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 196090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 202bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined (__mips__) 212bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define ASSEMBLY_SCRATCH_SIZE 4096 222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#else 236090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#define ASSEMBLY_SCRATCH_SIZE 2048 242bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 256090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 266090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangusing namespace android; 276090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 286090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangclass ScanlineAssembly : public Assembly { 296090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang AssemblyKey<needs_t> mKey; 306090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangpublic: 316090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang ScanlineAssembly(needs_t needs, size_t size) 326090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang : Assembly(size), mKey(needs) { } 336090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang const AssemblyKey<needs_t>& key() const { return mKey; } 346090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang}; 356090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 366090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangstatic void ggl_test_codegen(uint32_t n, uint32_t p, uint32_t t0, uint32_t t1) 376090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang{ 386090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#if ANDROID_ARM_CODEGEN 396090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLContext* c; 406090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglInit(&c); 416090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs_t needs; 426090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.n = n; 436090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.p = p; 446090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[0] = t0; 456090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[1] = t1; 466090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang sp<ScanlineAssembly> a(new ScanlineAssembly(needs, ASSEMBLY_SCRATCH_SIZE)); 472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 482bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined(__arm__) 496090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLAssembler assembler( new ARMAssembler(a) ); 502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 512bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined(__mips__) 532bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind GGLAssembler assembler( new ArmToMipsAssembler(a) ); 542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 566090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang int err = assembler.scanline(needs, (context_t*)c); 576090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang if (err != 0) { 586090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang printf("error %08x (%s)\n", err, strerror(-err)); 596090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang } 606090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglUninit(c); 616090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 622bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind printf("This test runs only on ARM or MIPS\n"); 636090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 646090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang} 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint main(int argc, char** argv) 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (argc != 2) { 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf("usage: %s 00000117:03454504_00001501_00000000\n", argv[0]); 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t n; 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t p; 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t0; 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t1; 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sscanf(argv[1], "%08x:%08x_%08x_%08x", &p, &n, &t0, &t1); 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ggl_test_codegen(n, p, t0, t1); 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 80