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" 13d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross#include "codeflinger/Arm64Assembler.h" 146090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 15658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#if defined(__arm__) || defined(__mips__) || defined(__aarch64__) 166090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 1 176090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 186090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 0 196090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 206090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 212bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined (__mips__) 222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define ASSEMBLY_SCRATCH_SIZE 4096 23658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#elif defined(__aarch64__) 24658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define ASSEMBLY_SCRATCH_SIZE 8192 252bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#else 266090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#define ASSEMBLY_SCRATCH_SIZE 2048 272bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 286090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 296090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangusing namespace android; 306090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 316090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangclass ScanlineAssembly : public Assembly { 326090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang AssemblyKey<needs_t> mKey; 336090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangpublic: 346090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang ScanlineAssembly(needs_t needs, size_t size) 356090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang : Assembly(size), mKey(needs) { } 366090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang const AssemblyKey<needs_t>& key() const { return mKey; } 376090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang}; 386090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 396090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangstatic void ggl_test_codegen(uint32_t n, uint32_t p, uint32_t t0, uint32_t t1) 406090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang{ 416090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#if ANDROID_ARM_CODEGEN 426090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLContext* c; 436090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglInit(&c); 446090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs_t needs; 456090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.n = n; 466090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.p = p; 476090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[0] = t0; 486090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[1] = t1; 496090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang sp<ScanlineAssembly> a(new ScanlineAssembly(needs, ASSEMBLY_SCRATCH_SIZE)); 502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 512bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined(__arm__) 526090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLAssembler assembler( new ARMAssembler(a) ); 532bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 55f1d63bdf0059da2f80478ed61cd6064f806752b0Duane Sand#if defined(__mips__) && !defined(__LP64__) 562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind GGLAssembler assembler( new ArmToMipsAssembler(a) ); 572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 59658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#if defined(__aarch64__) 60d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross GGLAssembler assembler( new ArmToArm64Assembler(a) ); 61658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#endif 62658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 636090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang int err = assembler.scanline(needs, (context_t*)c); 646090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang if (err != 0) { 656090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang printf("error %08x (%s)\n", err, strerror(-err)); 666090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang } 676090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglUninit(c); 686090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 69d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross printf("This test runs only on ARM, Arm64 or MIPS\n"); 706090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 716090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang} 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint main(int argc, char** argv) 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (argc != 2) { 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf("usage: %s 00000117:03454504_00001501_00000000\n", argv[0]); 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t n; 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t p; 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t0; 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t1; 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sscanf(argv[1], "%08x:%08x_%08x_%08x", &p, &n, &t0, &t1); 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ggl_test_codegen(n, p, t0, t1); 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 87