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" 12734f50c2fe5b8778370b687c29401effcb254862Duane Sand#if defined(__mips__) && !defined(__LP64__) && __mips_isa_rev < 6 132bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#include "codeflinger/MIPSAssembler.h" 14606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#elif defined(__mips__) && defined(__LP64__) && __mips_isa_rev == 6 15606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#include "codeflinger/MIPS64Assembler.h" 16734f50c2fe5b8778370b687c29401effcb254862Duane Sand#endif 17d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross#include "codeflinger/Arm64Assembler.h" 186090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 19606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if defined(__arm__) || (defined(__mips__) && ((!defined(__LP64__) && __mips_isa_rev < 6) || (defined(__LP64__) && __mips_isa_rev == 6))) || defined(__aarch64__) 206090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 1 216090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 226090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang# define ANDROID_ARM_CODEGEN 0 236090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 246090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 25606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if defined(__mips__) && ((!defined(__LP64__) && __mips_isa_rev < 6) || (defined(__LP64__) && __mips_isa_rev == 6)) 262bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define ASSEMBLY_SCRATCH_SIZE 4096 27658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#elif defined(__aarch64__) 28658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#define ASSEMBLY_SCRATCH_SIZE 8192 292bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#else 306090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#define ASSEMBLY_SCRATCH_SIZE 2048 312bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 326090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 336090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangusing namespace android; 346090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 356090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangclass ScanlineAssembly : public Assembly { 366090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang AssemblyKey<needs_t> mKey; 376090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangpublic: 386090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang ScanlineAssembly(needs_t needs, size_t size) 396090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang : Assembly(size), mKey(needs) { } 406090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang const AssemblyKey<needs_t>& key() const { return mKey; } 416090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang}; 426090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang 436090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huangstatic void ggl_test_codegen(uint32_t n, uint32_t p, uint32_t t0, uint32_t t1) 446090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang{ 456090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#if ANDROID_ARM_CODEGEN 466090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLContext* c; 476090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglInit(&c); 486090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs_t needs; 496090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.n = n; 506090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.p = p; 516090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[0] = t0; 526090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang needs.t[1] = t1; 536090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang sp<ScanlineAssembly> a(new ScanlineAssembly(needs, ASSEMBLY_SCRATCH_SIZE)); 542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if defined(__arm__) 566090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang GGLAssembler assembler( new ARMAssembler(a) ); 572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 59734f50c2fe5b8778370b687c29401effcb254862Duane Sand#if defined(__mips__) && !defined(__LP64__) && __mips_isa_rev < 6 602bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind GGLAssembler assembler( new ArmToMipsAssembler(a) ); 612bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif 622bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind 63606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if defined(__mips__) && defined(__LP64__) && __mips_isa_rev == 6 64606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes GGLAssembler assembler( new ArmToMips64Assembler(a) ); 65606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif 66606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes 67658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#if defined(__aarch64__) 68d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross GGLAssembler assembler( new ArmToArm64Assembler(a) ); 69658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat#endif 70658f89dc5c418dbbc0c5d78f5861855b90ca8c9fAshok Bhat 716090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang int err = assembler.scanline(needs, (context_t*)c); 726090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang if (err != 0) { 736090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang printf("error %08x (%s)\n", err, strerror(-err)); 746090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang } 756090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang gglUninit(c); 766090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#else 77d4146e6091d6ed947ce9edd0f8ef3e5fe066d716Colin Cross printf("This test runs only on ARM, Arm64 or MIPS\n"); 786090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang#endif 796090dacd1894429baaf13f7b30b2f6e9e2c1617fJim Huang} 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint main(int argc, char** argv) 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if (argc != 2) { 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf("usage: %s 00000117:03454504_00001501_00000000\n", argv[0]); 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t n; 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t p; 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t0; 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project uint32_t t1; 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sscanf(argv[1], "%08x:%08x_%08x_%08x", &p, &n, &t0, &t1); 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ggl_test_codegen(n, p, t0, t1); 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 95