summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
authorJesse Hall2015-01-22 12:50:55 -0600
committerAndroid Git Automerger2015-01-22 12:50:55 -0600
commit0cfe43a0ad9ee43590c4f181662dc0d7d91e384d (patch)
tree4d4d09c71f74d8477e39f87df6daf6988ef8c513 /opengl
parent471ec6b4284f645b5e933537fda88de867105fb2 (diff)
parentf551e1c1a59ae7ac906e2b204c3704d0dbf926a8 (diff)
downloadframeworks-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.cpp41
-rw-r--r--opengl/libs/GLES2/gl2.cpp44
-rw-r--r--opengl/libs/GLES_CM/gl.cpp44
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), \