Merge "[MIPS] Further opengl support for mips64 and mipsr6"
This commit is contained in:
commit
f551e1c1a5
@ -120,6 +120,38 @@ namespace android {
|
|||||||
: "cc" \
|
: "cc" \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#elif defined(__mips64)
|
||||||
|
|
||||||
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
|
|
||||||
|
#define CALL_GL_EXTENSION_API(_api, ...) \
|
||||||
|
register unsigned int _t0 asm("t0"); \
|
||||||
|
register unsigned int _fn asm("t1"); \
|
||||||
|
register unsigned int _tls asm("v1"); \
|
||||||
|
asm volatile( \
|
||||||
|
".set push\n\t" \
|
||||||
|
".set noreorder\n\t" \
|
||||||
|
"rdhwr %[tls], $29\n\t" \
|
||||||
|
"ld %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" move %[fn], $ra\n\t" \
|
||||||
|
"ld %[t0], %[API](%[t0])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
|
"1:\n\t" \
|
||||||
|
"jalr $0, %[fn]\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
".set pop\n\t" \
|
||||||
|
: [fn] "=c"(_fn), \
|
||||||
|
[tls] "=&r"(_tls), \
|
||||||
|
[t0] "=&r"(_t0) \
|
||||||
|
: [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \
|
||||||
|
[API] "I"(__builtin_offsetof(gl_hooks_t, \
|
||||||
|
ext.extensions[_api])) \
|
||||||
|
: \
|
||||||
|
);
|
||||||
|
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
@ -131,15 +163,16 @@ namespace android {
|
|||||||
asm volatile( \
|
asm volatile( \
|
||||||
".set push\n\t" \
|
".set push\n\t" \
|
||||||
".set noreorder\n\t" \
|
".set noreorder\n\t" \
|
||||||
".set mips32r2\n\t" \
|
|
||||||
"rdhwr %[tls], $29\n\t" \
|
"rdhwr %[tls], $29\n\t" \
|
||||||
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
"beqz %[t0], 1f\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
" move %[fn], $ra\n\t" \
|
" move %[fn], $ra\n\t" \
|
||||||
"lw %[fn], %[API](%[t0])\n\t" \
|
"lw %[t0], %[API](%[t0])\n\t" \
|
||||||
"movz %[fn], $ra, %[fn]\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
"1:\n\t" \
|
"1:\n\t" \
|
||||||
"j %[fn]\n\t" \
|
"jalr $0, %[fn]\n\t" \
|
||||||
" nop\n\t" \
|
" nop\n\t" \
|
||||||
".set pop\n\t" \
|
".set pop\n\t" \
|
||||||
: [fn] "=c"(_fn), \
|
: [fn] "=c"(_fn), \
|
||||||
|
@ -118,27 +118,61 @@ using namespace android;
|
|||||||
: "cc" \
|
: "cc" \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#elif defined(__mips64)
|
||||||
|
|
||||||
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
|
|
||||||
|
#define CALL_GL_API(_api, ...) \
|
||||||
|
register unsigned long _t0 asm("t0"); \
|
||||||
|
register unsigned long _fn asm("t9"); \
|
||||||
|
register unsigned long _tls asm("v1"); \
|
||||||
|
register unsigned long _v0 asm("v0"); \
|
||||||
|
asm volatile( \
|
||||||
|
".set push\n\t" \
|
||||||
|
".set noreorder\n\t" \
|
||||||
|
"rdhwr %[tls], $29\n\t" \
|
||||||
|
"ld %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" move %[fn], $ra\n\t" \
|
||||||
|
"ld %[t0], %[API](%[t0])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
|
"1:\n\t" \
|
||||||
|
"jalr $0, %[fn]\n\t" \
|
||||||
|
" move %[v0], $0\n\t" \
|
||||||
|
".set pop\n\t" \
|
||||||
|
: [fn] "=c"(_fn), \
|
||||||
|
[tls] "=&r"(_tls), \
|
||||||
|
[t0] "=&r"(_t0), \
|
||||||
|
[v0] "=&r"(_v0) \
|
||||||
|
: [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*sizeof(void*)),\
|
||||||
|
[API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||||
|
: \
|
||||||
|
);
|
||||||
|
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
|
|
||||||
#define CALL_GL_API(_api, ...) \
|
#define CALL_GL_API(_api, ...) \
|
||||||
register unsigned int _t0 asm("t0"); \
|
register unsigned int _t0 asm("t0"); \
|
||||||
register unsigned int _fn asm("t1"); \
|
register unsigned int _fn asm("t9"); \
|
||||||
register unsigned int _tls asm("v1"); \
|
register unsigned int _tls asm("v1"); \
|
||||||
register unsigned int _v0 asm("v0"); \
|
register unsigned int _v0 asm("v0"); \
|
||||||
asm volatile( \
|
asm volatile( \
|
||||||
".set push\n\t" \
|
".set push\n\t" \
|
||||||
".set noreorder\n\t" \
|
".set noreorder\n\t" \
|
||||||
".set mips32r2\n\t" \
|
|
||||||
"rdhwr %[tls], $29\n\t" \
|
"rdhwr %[tls], $29\n\t" \
|
||||||
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
"beqz %[t0], 1f\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
" move %[fn],$ra\n\t" \
|
" move %[fn],$ra\n\t" \
|
||||||
"lw %[fn], %[API](%[t0])\n\t" \
|
"lw %[t0], %[API](%[t0])\n\t" \
|
||||||
"movz %[fn], $ra, %[fn]\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
"1:\n\t" \
|
"1:\n\t" \
|
||||||
"j %[fn]\n\t" \
|
"jalr $0, %[fn]\n\t" \
|
||||||
" move %[v0], $0\n\t" \
|
" move %[v0], $0\n\t" \
|
||||||
".set pop\n\t" \
|
".set pop\n\t" \
|
||||||
: [fn] "=c"(_fn), \
|
: [fn] "=c"(_fn), \
|
||||||
|
@ -174,27 +174,61 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
|
|||||||
: "cc" \
|
: "cc" \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#elif defined(__mips64)
|
||||||
|
|
||||||
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
|
|
||||||
|
#define CALL_GL_API(_api, ...) \
|
||||||
|
register unsigned long _t0 asm("t0"); \
|
||||||
|
register unsigned long _fn asm("t9"); \
|
||||||
|
register unsigned long _tls asm("v1"); \
|
||||||
|
register unsigned long _v0 asm("v0"); \
|
||||||
|
asm volatile( \
|
||||||
|
".set push\n\t" \
|
||||||
|
".set noreorder\n\t" \
|
||||||
|
"rdhwr %[tls], $29\n\t" \
|
||||||
|
"ld %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" move %[fn], $ra\n\t" \
|
||||||
|
"ld %[t0], %[API](%[t0])\n\t" \
|
||||||
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
|
"1:\n\t" \
|
||||||
|
"jalr $0, %[fn]\n\t" \
|
||||||
|
" move %[v0], $0\n\t" \
|
||||||
|
".set pop\n\t" \
|
||||||
|
: [fn] "=c"(_fn), \
|
||||||
|
[tls] "=&r"(_tls), \
|
||||||
|
[t0] "=&r"(_t0), \
|
||||||
|
[v0] "=&r"(_v0) \
|
||||||
|
: [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*sizeof(void*)),\
|
||||||
|
[API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||||
|
: \
|
||||||
|
);
|
||||||
|
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||||
|
|
||||||
#define CALL_GL_API(_api, ...) \
|
#define CALL_GL_API(_api, ...) \
|
||||||
register unsigned int _t0 asm("t0"); \
|
register unsigned int _t0 asm("t0"); \
|
||||||
register unsigned int _fn asm("t1"); \
|
register unsigned int _fn asm("t9"); \
|
||||||
register unsigned int _tls asm("v1"); \
|
register unsigned int _tls asm("v1"); \
|
||||||
register unsigned int _v0 asm("v0"); \
|
register unsigned int _v0 asm("v0"); \
|
||||||
asm volatile( \
|
asm volatile( \
|
||||||
".set push\n\t" \
|
".set push\n\t" \
|
||||||
".set noreorder\n\t" \
|
".set noreorder\n\t" \
|
||||||
".set mips32r2\n\t" \
|
|
||||||
"rdhwr %[tls], $29\n\t" \
|
"rdhwr %[tls], $29\n\t" \
|
||||||
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
"lw %[t0], %[OPENGL_API](%[tls])\n\t" \
|
||||||
"beqz %[t0], 1f\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
" move %[fn], $ra\n\t" \
|
" move %[fn], $ra\n\t" \
|
||||||
"lw %[fn], %[API](%[t0])\n\t" \
|
"lw %[t0], %[API](%[t0])\n\t" \
|
||||||
"movz %[fn], $ra, %[fn]\n\t" \
|
"beqz %[t0], 1f\n\t" \
|
||||||
|
" nop\n\t" \
|
||||||
|
"move %[fn], %[t0]\n\t" \
|
||||||
"1:\n\t" \
|
"1:\n\t" \
|
||||||
"j %[fn]\n\t" \
|
"jalr $0, %[fn]\n\t" \
|
||||||
" move %[v0], $0\n\t" \
|
" move %[v0], $0\n\t" \
|
||||||
".set pop\n\t" \
|
".set pop\n\t" \
|
||||||
: [fn] "=c"(_fn), \
|
: [fn] "=c"(_fn), \
|
||||||
|
Loading…
Reference in New Issue
Block a user