diff options
author | Jesse Hall | 2015-01-22 12:50:55 -0600 |
---|---|---|
committer | Android Git Automerger | 2015-01-22 12:50:55 -0600 |
commit | 0cfe43a0ad9ee43590c4f181662dc0d7d91e384d (patch) | |
tree | 4d4d09c71f74d8477e39f87df6daf6988ef8c513 /opengl | |
parent | 471ec6b4284f645b5e933537fda88de867105fb2 (diff) | |
parent | f551e1c1a59ae7ac906e2b204c3704d0dbf926a8 (diff) | |
download | frameworks-native-0cfe43a0ad9ee43590c4f181662dc0d7d91e384d.tar.gz frameworks-native-0cfe43a0ad9ee43590c4f181662dc0d7d91e384d.tar.xz frameworks-native-0cfe43a0ad9ee43590c4f181662dc0d7d91e384d.zip |
am f551e1c1: Merge "[MIPS] Further opengl support for mips64 and mipsr6"
* commit 'f551e1c1a59ae7ac906e2b204c3704d0dbf926a8':
[MIPS] Further opengl support for mips64 and mipsr6
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/libs/EGL/getProcAddress.cpp | 41 | ||||
-rw-r--r-- | opengl/libs/GLES2/gl2.cpp | 44 | ||||
-rw-r--r-- | opengl/libs/GLES_CM/gl.cpp | 44 |
3 files changed, 115 insertions, 14 deletions
diff --git a/opengl/libs/EGL/getProcAddress.cpp b/opengl/libs/EGL/getProcAddress.cpp index dcac2b207..25cffaec9 100644 --- a/opengl/libs/EGL/getProcAddress.cpp +++ b/opengl/libs/EGL/getProcAddress.cpp | |||
@@ -120,6 +120,38 @@ namespace android { | |||
120 | : "cc" \ | 120 | : "cc" \ |
121 | ); | 121 | ); |
122 | 122 | ||
123 | #elif defined(__mips64) | ||
124 | |||
125 | #define API_ENTRY(_api) __attribute__((noinline)) _api | ||
126 | |||
127 | #define CALL_GL_EXTENSION_API(_api, ...) \ | ||
128 | register unsigned int _t0 asm("t0"); \ | ||
129 | register unsigned int _fn asm("t1"); \ | ||
130 | register unsigned int _tls asm("v1"); \ | ||
131 | asm volatile( \ | ||
132 | ".set push\n\t" \ | ||
133 | ".set noreorder\n\t" \ | ||
134 | "rdhwr %[tls], $29\n\t" \ | ||
135 | "ld %[t0], %[OPENGL_API](%[tls])\n\t" \ | ||
136 | "beqz %[t0], 1f\n\t" \ | ||
137 | " move %[fn], $ra\n\t" \ | ||
138 | "ld %[t0], %[API](%[t0])\n\t" \ | ||
139 | "beqz %[t0], 1f\n\t" \ | ||
140 | " nop\n\t" \ | ||
141 | "move %[fn], %[t0]\n\t" \ | ||
142 | "1:\n\t" \ | ||
143 | "jalr $0, %[fn]\n\t" \ | ||
144 | " nop\n\t" \ | ||
145 | ".set pop\n\t" \ | ||
146 | : [fn] "=c"(_fn), \ | ||
147 | [tls] "=&r"(_tls), \ | ||
148 | [t0] "=&r"(_t0) \ | ||
149 | : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ | ||
150 | [API] "I"(__builtin_offsetof(gl_hooks_t, \ | ||
151 | ext.extensions[_api])) \ | ||
152 | : \ | ||
153 | ); | ||
154 | |||
123 | #elif defined(__mips__) | 155 | #elif defined(__mips__) |
124 | 156 | ||
125 | #define API_ENTRY(_api) __attribute__((noinline)) _api | 157 | #define API_ENTRY(_api) __attribute__((noinline)) _api |
@@ -131,15 +163,16 @@ namespace android { | |||
131 | asm volatile( \ | 163 | asm volatile( \ |
132 | ".set push\n\t" \ | 164 | ".set push\n\t" \ |
133 | ".set noreorder\n\t" \ | 165 | ".set noreorder\n\t" \ |
134 | ".set mips32r2\n\t" \ | ||
135 | "rdhwr %[tls], $29\n\t" \ | 166 | "rdhwr %[tls], $29\n\t" \ |
136 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ | 167 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ |
137 | "beqz %[t0], 1f\n\t" \ | 168 | "beqz %[t0], 1f\n\t" \ |
138 | " move %[fn], $ra\n\t" \ | 169 | " move %[fn], $ra\n\t" \ |
139 | "lw %[fn], %[API](%[t0])\n\t" \ | 170 | "lw %[t0], %[API](%[t0])\n\t" \ |
140 | "movz %[fn], $ra, %[fn]\n\t" \ | 171 | "beqz %[t0], 1f\n\t" \ |
172 | " nop\n\t" \ | ||
173 | "move %[fn], %[t0]\n\t" \ | ||
141 | "1:\n\t" \ | 174 | "1:\n\t" \ |
142 | "j %[fn]\n\t" \ | 175 | "jalr $0, %[fn]\n\t" \ |
143 | " nop\n\t" \ | 176 | " nop\n\t" \ |
144 | ".set pop\n\t" \ | 177 | ".set pop\n\t" \ |
145 | : [fn] "=c"(_fn), \ | 178 | : [fn] "=c"(_fn), \ |
diff --git a/opengl/libs/GLES2/gl2.cpp b/opengl/libs/GLES2/gl2.cpp index 0fb8965f8..dfd19f209 100644 --- a/opengl/libs/GLES2/gl2.cpp +++ b/opengl/libs/GLES2/gl2.cpp | |||
@@ -118,27 +118,61 @@ using namespace android; | |||
118 | : "cc" \ | 118 | : "cc" \ |
119 | ); | 119 | ); |
120 | 120 | ||
121 | #elif defined(__mips64) | ||
122 | |||
123 | #define API_ENTRY(_api) __attribute__((noinline)) _api | ||
124 | |||
125 | #define CALL_GL_API(_api, ...) \ | ||
126 | register unsigned long _t0 asm("t0"); \ | ||
127 | register unsigned long _fn asm("t9"); \ | ||
128 | register unsigned long _tls asm("v1"); \ | ||
129 | register unsigned long _v0 asm("v0"); \ | ||
130 | asm volatile( \ | ||
131 | ".set push\n\t" \ | ||
132 | ".set noreorder\n\t" \ | ||
133 | "rdhwr %[tls], $29\n\t" \ | ||
134 | "ld %[t0], %[OPENGL_API](%[tls])\n\t" \ | ||
135 | "beqz %[t0], 1f\n\t" \ | ||
136 | " move %[fn], $ra\n\t" \ | ||
137 | "ld %[t0], %[API](%[t0])\n\t" \ | ||
138 | "beqz %[t0], 1f\n\t" \ | ||
139 | " nop\n\t" \ | ||
140 | "move %[fn], %[t0]\n\t" \ | ||
141 | "1:\n\t" \ | ||
142 | "jalr $0, %[fn]\n\t" \ | ||
143 | " move %[v0], $0\n\t" \ | ||
144 | ".set pop\n\t" \ | ||
145 | : [fn] "=c"(_fn), \ | ||
146 | [tls] "=&r"(_tls), \ | ||
147 | [t0] "=&r"(_t0), \ | ||
148 | [v0] "=&r"(_v0) \ | ||
149 | : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*sizeof(void*)),\ | ||
150 | [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ | ||
151 | : \ | ||
152 | ); | ||
153 | |||
121 | #elif defined(__mips__) | 154 | #elif defined(__mips__) |
122 | 155 | ||
123 | #define API_ENTRY(_api) __attribute__((noinline)) _api | 156 | #define API_ENTRY(_api) __attribute__((noinline)) _api |
124 | 157 | ||
125 | #define CALL_GL_API(_api, ...) \ | 158 | #define CALL_GL_API(_api, ...) \ |
126 | register unsigned int _t0 asm("t0"); \ | 159 | register unsigned int _t0 asm("t0"); \ |
127 | register unsigned int _fn asm("t1"); \ | 160 | register unsigned int _fn asm("t9"); \ |
128 | register unsigned int _tls asm("v1"); \ | 161 | register unsigned int _tls asm("v1"); \ |
129 | register unsigned int _v0 asm("v0"); \ | 162 | register unsigned int _v0 asm("v0"); \ |
130 | asm volatile( \ | 163 | asm volatile( \ |
131 | ".set push\n\t" \ | 164 | ".set push\n\t" \ |
132 | ".set noreorder\n\t" \ | 165 | ".set noreorder\n\t" \ |
133 | ".set mips32r2\n\t" \ | ||
134 | "rdhwr %[tls], $29\n\t" \ | 166 | "rdhwr %[tls], $29\n\t" \ |
135 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ | 167 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ |
136 | "beqz %[t0], 1f\n\t" \ | 168 | "beqz %[t0], 1f\n\t" \ |
137 | " move %[fn],$ra\n\t" \ | 169 | " move %[fn],$ra\n\t" \ |
138 | "lw %[fn], %[API](%[t0])\n\t" \ | 170 | "lw %[t0], %[API](%[t0])\n\t" \ |
139 | "movz %[fn], $ra, %[fn]\n\t" \ | 171 | "beqz %[t0], 1f\n\t" \ |
172 | " nop\n\t" \ | ||
173 | "move %[fn], %[t0]\n\t" \ | ||
140 | "1:\n\t" \ | 174 | "1:\n\t" \ |
141 | "j %[fn]\n\t" \ | 175 | "jalr $0, %[fn]\n\t" \ |
142 | " move %[v0], $0\n\t" \ | 176 | " move %[v0], $0\n\t" \ |
143 | ".set pop\n\t" \ | 177 | ".set pop\n\t" \ |
144 | : [fn] "=c"(_fn), \ | 178 | : [fn] "=c"(_fn), \ |
diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp index 7896a6f1c..1297ac47a 100644 --- a/opengl/libs/GLES_CM/gl.cpp +++ b/opengl/libs/GLES_CM/gl.cpp | |||
@@ -174,27 +174,61 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, | |||
174 | : "cc" \ | 174 | : "cc" \ |
175 | ); | 175 | ); |
176 | 176 | ||
177 | #elif defined(__mips64) | ||
178 | |||
179 | #define API_ENTRY(_api) __attribute__((noinline)) _api | ||
180 | |||
181 | #define CALL_GL_API(_api, ...) \ | ||
182 | register unsigned long _t0 asm("t0"); \ | ||
183 | register unsigned long _fn asm("t9"); \ | ||
184 | register unsigned long _tls asm("v1"); \ | ||
185 | register unsigned long _v0 asm("v0"); \ | ||
186 | asm volatile( \ | ||
187 | ".set push\n\t" \ | ||
188 | ".set noreorder\n\t" \ | ||
189 | "rdhwr %[tls], $29\n\t" \ | ||
190 | "ld %[t0], %[OPENGL_API](%[tls])\n\t" \ | ||
191 | "beqz %[t0], 1f\n\t" \ | ||
192 | " move %[fn], $ra\n\t" \ | ||
193 | "ld %[t0], %[API](%[t0])\n\t" \ | ||
194 | "beqz %[t0], 1f\n\t" \ | ||
195 | " nop\n\t" \ | ||
196 | "move %[fn], %[t0]\n\t" \ | ||
197 | "1:\n\t" \ | ||
198 | "jalr $0, %[fn]\n\t" \ | ||
199 | " move %[v0], $0\n\t" \ | ||
200 | ".set pop\n\t" \ | ||
201 | : [fn] "=c"(_fn), \ | ||
202 | [tls] "=&r"(_tls), \ | ||
203 | [t0] "=&r"(_t0), \ | ||
204 | [v0] "=&r"(_v0) \ | ||
205 | : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*sizeof(void*)),\ | ||
206 | [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ | ||
207 | : \ | ||
208 | ); | ||
209 | |||
177 | #elif defined(__mips__) | 210 | #elif defined(__mips__) |
178 | 211 | ||
179 | #define API_ENTRY(_api) __attribute__((noinline)) _api | 212 | #define API_ENTRY(_api) __attribute__((noinline)) _api |
180 | 213 | ||
181 | #define CALL_GL_API(_api, ...) \ | 214 | #define CALL_GL_API(_api, ...) \ |
182 | register unsigned int _t0 asm("t0"); \ | 215 | register unsigned int _t0 asm("t0"); \ |
183 | register unsigned int _fn asm("t1"); \ | 216 | register unsigned int _fn asm("t9"); \ |
184 | register unsigned int _tls asm("v1"); \ | 217 | register unsigned int _tls asm("v1"); \ |
185 | register unsigned int _v0 asm("v0"); \ | 218 | register unsigned int _v0 asm("v0"); \ |
186 | asm volatile( \ | 219 | asm volatile( \ |
187 | ".set push\n\t" \ | 220 | ".set push\n\t" \ |
188 | ".set noreorder\n\t" \ | 221 | ".set noreorder\n\t" \ |
189 | ".set mips32r2\n\t" \ | ||
190 | "rdhwr %[tls], $29\n\t" \ | 222 | "rdhwr %[tls], $29\n\t" \ |
191 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ | 223 | "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ |
192 | "beqz %[t0], 1f\n\t" \ | 224 | "beqz %[t0], 1f\n\t" \ |
193 | " move %[fn], $ra\n\t" \ | 225 | " move %[fn], $ra\n\t" \ |
194 | "lw %[fn], %[API](%[t0])\n\t" \ | 226 | "lw %[t0], %[API](%[t0])\n\t" \ |
195 | "movz %[fn], $ra, %[fn]\n\t" \ | 227 | "beqz %[t0], 1f\n\t" \ |
228 | " nop\n\t" \ | ||
229 | "move %[fn], %[t0]\n\t" \ | ||
196 | "1:\n\t" \ | 230 | "1:\n\t" \ |
197 | "j %[fn]\n\t" \ | 231 | "jalr $0, %[fn]\n\t" \ |
198 | " move %[v0], $0\n\t" \ | 232 | " move %[v0], $0\n\t" \ |
199 | ".set pop\n\t" \ | 233 | ".set pop\n\t" \ |
200 | : [fn] "=c"(_fn), \ | 234 | : [fn] "=c"(_fn), \ |