Searched refs:v2 (Results 1 - 25 of 50) sorted by relevance

12

/frameworks/compile/libbcc/lib/Renderscript/runtime/arch/
H A Dx86_generic.c29 extern float __attribute__((overloadable)) fmax(float v1, float v2) { argument
30 return v1 > v2 ? v1 : v2;
33 extern float2 __attribute__((overloadable)) fmax(float2 v1, float2 v2) { argument
35 r.x = v1.x > v2.x ? v1.x : v2.x;
36 r.y = v1.y > v2.y ? v1.y : v2.y;
40 extern float3 __attribute__((overloadable)) fmax(float3 v1, float3 v2) { argument
42 r.x = v1.x > v2
48 fmax(float4 v1, float4 v2) argument
57 fmax(float2 v1, float v2) argument
64 fmax(float3 v1, float v2) argument
72 fmax(float4 v1, float v2) argument
81 fmin(float v1, float v2) argument
89 fmin(float2 v1, float2 v2) argument
96 fmin(float3 v1, float3 v2) argument
104 fmin(float4 v1, float4 v2) argument
113 fmin(float2 v1, float v2) argument
120 fmin(float3 v1, float v2) argument
128 fmin(float4 v1, float v2) argument
142 max(char v1, char v2) argument
146 max(char2 v1, char2 v2) argument
153 max(char3 v1, char3 v2) argument
161 max(char4 v1, char4 v2) argument
170 max(short v1, short v2) argument
174 max(short2 v1, short2 v2) argument
181 max(short3 v1, short3 v2) argument
189 max(short4 v1, short4 v2) argument
198 max(int v1, int v2) argument
202 max(int2 v1, int2 v2) argument
209 max(int3 v1, int3 v2) argument
217 max(int4 v1, int4 v2) argument
226 max(int64_t v1, int64_t v2) argument
230 max(long2 v1, long2 v2) argument
237 max(long3 v1, long3 v2) argument
245 max(long4 v1, long4 v2) argument
254 max(uchar v1, uchar v2) argument
258 max(uchar2 v1, uchar2 v2) argument
265 max(uchar3 v1, uchar3 v2) argument
273 max(uchar4 v1, uchar4 v2) argument
282 max(ushort v1, ushort v2) argument
286 max(ushort2 v1, ushort2 v2) argument
293 max(ushort3 v1, ushort3 v2) argument
301 max(ushort4 v1, ushort4 v2) argument
310 max(uint v1, uint v2) argument
314 max(uint2 v1, uint2 v2) argument
321 max(uint3 v1, uint3 v2) argument
329 max(uint4 v1, uint4 v2) argument
338 max(ulong v1, ulong v2) argument
342 max(ulong2 v1, ulong2 v2) argument
349 max(ulong3 v1, ulong3 v2) argument
357 max(ulong4 v1, ulong4 v2) argument
366 max(float v1, float v2) argument
370 max(float2 v1, float2 v2) argument
374 max(float2 v1, float v2) argument
378 max(float3 v1, float3 v2) argument
382 max(float3 v1, float v2) argument
386 max(float4 v1, float4 v2) argument
390 max(float4 v1, float v2) argument
399 min(int8_t v1, int8_t v2) argument
403 min(char2 v1, char2 v2) argument
410 min(char3 v1, char3 v2) argument
418 min(char4 v1, char4 v2) argument
427 min(int16_t v1, int16_t v2) argument
431 min(short2 v1, short2 v2) argument
438 min(short3 v1, short3 v2) argument
446 min(short4 v1, short4 v2) argument
455 min(int32_t v1, int32_t v2) argument
459 min(int2 v1, int2 v2) argument
466 min(int3 v1, int3 v2) argument
474 min(int4 v1, int4 v2) argument
483 min(int64_t v1, int64_t v2) argument
487 min(long2 v1, long2 v2) argument
494 min(long3 v1, long3 v2) argument
502 min(long4 v1, long4 v2) argument
511 min(uchar v1, uchar v2) argument
515 min(uchar2 v1, uchar2 v2) argument
522 min(uchar3 v1, uchar3 v2) argument
530 min(uchar4 v1, uchar4 v2) argument
539 min(ushort v1, ushort v2) argument
543 min(ushort2 v1, ushort2 v2) argument
550 min(ushort3 v1, ushort3 v2) argument
558 min(ushort4 v1, ushort4 v2) argument
567 min(uint v1, uint v2) argument
571 min(uint2 v1, uint2 v2) argument
578 min(uint3 v1, uint3 v2) argument
586 min(uint4 v1, uint4 v2) argument
595 min(ulong v1, ulong v2) argument
599 min(ulong2 v1, ulong2 v2) argument
606 min(ulong3 v1, ulong3 v2) argument
614 min(ulong4 v1, ulong4 v2) argument
623 min(float v1, float v2) argument
627 min(float2 v1, float2 v2) argument
631 min(float2 v1, float v2) argument
635 min(float3 v1, float3 v2) argument
639 min(float3 v1, float v2) argument
643 min(float4 v1, float4 v2) argument
647 min(float4 v1, float v2) argument
[all...]
H A Dgeneric.c87 extern float __attribute__((overloadable)) fmax(float v1, float v2) { argument
88 return v1 > v2 ? v1 : v2;
91 extern float2 __attribute__((overloadable)) fmax(float2 v1, float2 v2) { argument
93 r.x = v1.x > v2.x ? v1.x : v2.x;
94 r.y = v1.y > v2.y ? v1.y : v2.y;
98 extern float3 __attribute__((overloadable)) fmax(float3 v1, float3 v2) { argument
100 r.x = v1.x > v2
106 fmax(float4 v1, float4 v2) argument
115 fmax(float2 v1, float v2) argument
122 fmax(float3 v1, float v2) argument
130 fmax(float4 v1, float v2) argument
139 fmin(float v1, float v2) argument
147 fmin(float2 v1, float2 v2) argument
154 fmin(float3 v1, float3 v2) argument
162 fmin(float4 v1, float4 v2) argument
171 fmin(float2 v1, float v2) argument
178 fmin(float3 v1, float v2) argument
186 fmin(float4 v1, float v2) argument
200 max(char v1, char v2) argument
204 max(char2 v1, char2 v2) argument
211 max(char3 v1, char3 v2) argument
219 max(char4 v1, char4 v2) argument
228 max(short v1, short v2) argument
232 max(short2 v1, short2 v2) argument
239 max(short3 v1, short3 v2) argument
247 max(short4 v1, short4 v2) argument
256 max(int v1, int v2) argument
260 max(int2 v1, int2 v2) argument
267 max(int3 v1, int3 v2) argument
275 max(int4 v1, int4 v2) argument
284 max(int64_t v1, int64_t v2) argument
288 max(long2 v1, long2 v2) argument
295 max(long3 v1, long3 v2) argument
303 max(long4 v1, long4 v2) argument
312 max(uchar v1, uchar v2) argument
316 max(uchar2 v1, uchar2 v2) argument
323 max(uchar3 v1, uchar3 v2) argument
331 max(uchar4 v1, uchar4 v2) argument
340 max(ushort v1, ushort v2) argument
344 max(ushort2 v1, ushort2 v2) argument
351 max(ushort3 v1, ushort3 v2) argument
359 max(ushort4 v1, ushort4 v2) argument
368 max(uint v1, uint v2) argument
372 max(uint2 v1, uint2 v2) argument
379 max(uint3 v1, uint3 v2) argument
387 max(uint4 v1, uint4 v2) argument
396 max(ulong v1, ulong v2) argument
400 max(ulong2 v1, ulong2 v2) argument
407 max(ulong3 v1, ulong3 v2) argument
415 max(ulong4 v1, ulong4 v2) argument
424 max(float v1, float v2) argument
428 max(float2 v1, float2 v2) argument
432 max(float2 v1, float v2) argument
436 max(float3 v1, float3 v2) argument
440 max(float3 v1, float v2) argument
444 max(float4 v1, float4 v2) argument
448 max(float4 v1, float v2) argument
457 min(int8_t v1, int8_t v2) argument
461 min(char2 v1, char2 v2) argument
468 min(char3 v1, char3 v2) argument
476 min(char4 v1, char4 v2) argument
485 min(int16_t v1, int16_t v2) argument
489 min(short2 v1, short2 v2) argument
496 min(short3 v1, short3 v2) argument
504 min(short4 v1, short4 v2) argument
513 min(int32_t v1, int32_t v2) argument
517 min(int2 v1, int2 v2) argument
524 min(int3 v1, int3 v2) argument
532 min(int4 v1, int4 v2) argument
541 min(int64_t v1, int64_t v2) argument
545 min(long2 v1, long2 v2) argument
552 min(long3 v1, long3 v2) argument
560 min(long4 v1, long4 v2) argument
569 min(uchar v1, uchar v2) argument
573 min(uchar2 v1, uchar2 v2) argument
580 min(uchar3 v1, uchar3 v2) argument
588 min(uchar4 v1, uchar4 v2) argument
597 min(ushort v1, ushort v2) argument
601 min(ushort2 v1, ushort2 v2) argument
608 min(ushort3 v1, ushort3 v2) argument
616 min(ushort4 v1, ushort4 v2) argument
625 min(uint v1, uint v2) argument
629 min(uint2 v1, uint2 v2) argument
636 min(uint3 v1, uint3 v2) argument
644 min(uint4 v1, uint4 v2) argument
653 min(ulong v1, ulong v2) argument
657 min(ulong2 v1, ulong2 v2) argument
664 min(ulong3 v1, ulong3 v2) argument
672 min(ulong4 v1, ulong4 v2) argument
681 min(float v1, float v2) argument
685 min(float2 v1, float2 v2) argument
689 min(float2 v1, float v2) argument
693 min(float3 v1, float3 v2) argument
697 min(float3 v1, float v2) argument
701 min(float4 v1, float4 v2) argument
705 min(float4 v1, float v2) argument
[all...]
/frameworks/base/tools/layoutlib/bridge/tests/src/android/graphics/
H A DMatrix_DelegateTest.java50 float[] v2 = new float[9];
52 m2.getValues(v2);
55 assertEquals(v1[i], v2[i]);
/frameworks/compile/libbcc/tests/data/src/
H A DaddressOf.c14 float *v2 = &s[index].x; local
15 printf("testStruct: %g %g %g\n",base.x, *v, *v2);
/frameworks/compile/libbcc/lib/Renderscript/runtime/
H A Drs_cl.c12 extern float __attribute__((overloadable)) fmin(float v, float v2);
13 extern float2 __attribute__((overloadable)) fmin(float2 v, float v2);
14 extern float3 __attribute__((overloadable)) fmin(float3 v, float v2);
15 extern float4 __attribute__((overloadable)) fmin(float4 v, float v2);
17 extern float __attribute__((overloadable)) fmax(float v, float v2);
18 extern float2 __attribute__((overloadable)) fmax(float2 v, float v2);
19 extern float3 __attribute__((overloadable)) fmax(float3 v, float v2);
20 extern float4 __attribute__((overloadable)) fmax(float4 v, float v2);
71 extern float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2) { \
73 r.x = fnc(v1.x, v2
1119 float2 v2 = {native_log2(v.x), native_log2(v.y)}; local
1123 float3 v2 = {native_log2(v.x), native_log2(v.y), native_log2(v.z)}; local
1127 float4 v2 = {native_log2(v.x), native_log2(v.y), native_log2(v.z), native_log2(v.w)}; local
1159 float v2 = native_log2(v); local
1164 float2 v2 = native_log2(v); local
1169 float3 v2 = native_log2(v); local
1174 float4 v2 = native_log2(v); local
[all...]
/frameworks/rs/java/tests/RSTest_CompatLib/src/com/android/rs/test/
H A DUT_bug_char.java40 private byte min(byte v1, byte v2) { argument
41 return v1 < v2 ? v1 : v2;
43 private byte[] min(byte[] v1, byte[] v2) { argument
44 assert v1.length == v2.length;
47 rv[i] = min(v1[i], v2[i]);
H A DUT_math_agree.java149 private float min(float v1, float v2) { argument
150 return v1 < v2 ? v1 : v2;
152 private float[] min(float[] v1, float[] v2) { argument
153 assert v1.length == v2.length;
156 rv[i] = min(v1[i], v2[i]);
159 private byte min(byte v1, byte v2) { argument
160 return v1 < v2 ? v1 : v2;
162 private byte[] min(byte[] v1, byte[] v2) { argument
169 min(short v1, short v2) argument
172 min(short[] v1, short[] v2) argument
179 min(int v1, int v2) argument
182 min(int[] v1, int[] v2) argument
189 min(long v1, long v2) argument
192 min(long[] v1, long[] v2) argument
202 max(float v1, float v2) argument
205 max(float[] v1, float[] v2) argument
212 max(byte v1, byte v2) argument
215 max(byte[] v1, byte[] v2) argument
222 max(short v1, short v2) argument
225 max(short[] v1, short[] v2) argument
232 max(int v1, int v2) argument
235 max(int[] v1, int[] v2) argument
242 max(long v1, long v2) argument
245 max(long[] v1, long[] v2) argument
255 fmin(float v1, float v2) argument
258 fmin(float[] v1, float[] v2) argument
261 fmin(float[] v1, float v2) argument
269 fmax(float v1, float v2) argument
272 fmax(float[] v1, float[] v2) argument
275 fmax(float[] v1, float v2) argument
[all...]
/frameworks/rs/java/tests/RsTest/src/com/android/rs/test/
H A DUT_bug_char.java40 private byte min(byte v1, byte v2) { argument
41 return v1 < v2 ? v1 : v2;
43 private byte[] min(byte[] v1, byte[] v2) { argument
44 assert v1.length == v2.length;
47 rv[i] = min(v1[i], v2[i]);
H A DUT_math_agree.java149 private float min(float v1, float v2) { argument
150 return v1 < v2 ? v1 : v2;
152 private float[] min(float[] v1, float[] v2) { argument
153 assert v1.length == v2.length;
156 rv[i] = min(v1[i], v2[i]);
159 private byte min(byte v1, byte v2) { argument
160 return v1 < v2 ? v1 : v2;
162 private byte[] min(byte[] v1, byte[] v2) { argument
169 min(short v1, short v2) argument
172 min(short[] v1, short[] v2) argument
179 min(int v1, int v2) argument
182 min(int[] v1, int[] v2) argument
189 min(long v1, long v2) argument
192 min(long[] v1, long[] v2) argument
202 max(float v1, float v2) argument
205 max(float[] v1, float[] v2) argument
212 max(byte v1, byte v2) argument
215 max(byte[] v1, byte[] v2) argument
222 max(short v1, short v2) argument
225 max(short[] v1, short[] v2) argument
232 max(int v1, int v2) argument
235 max(int[] v1, int[] v2) argument
242 max(long v1, long v2) argument
245 max(long[] v1, long[] v2) argument
255 fmin(float v1, float v2) argument
258 fmin(float[] v1, float[] v2) argument
261 fmin(float[] v1, float v2) argument
269 fmax(float v1, float v2) argument
272 fmax(float[] v1, float[] v2) argument
275 fmax(float[] v1, float v2) argument
[all...]
/frameworks/native/opengl/libagl/
H A Dprimitives.cpp40 vertex_t* v0, vertex_t* v1, vertex_t* v2);
45 vertex_t* v0, vertex_t* v1, vertex_t* v2);
48 vertex_t* v0, vertex_t* v1, vertex_t* v2);
51 vertex_t* v0, vertex_t* v1, vertex_t* v2);
54 vertex_t* v0, vertex_t* v1, vertex_t* v2);
57 vertex_t* v0, vertex_t* v1, vertex_t* v2);
60 vertex_t* v0, vertex_t* v1, vertex_t* v2);
63 vertex_t* v0, vertex_t* v1, vertex_t* v2);
74 vertex_t* v0, vertex_t* v1, vertex_t* v2)
88 if(!(v2
73 lightTriangleDarkSmooth(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
96 lightTriangleDarkFlat(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
109 lightTriangleSmooth(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
120 lightTriangleFlat(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
159 lightTriangleDarkSmoothFog(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
167 lightTriangleDarkFlatFog(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
177 lightTriangleSmoothFog(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
185 lightTriangleFlatFog(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
236 initTriangle( vertex_t const* v0, vertex_t const* v1, vertex_t const* v2) argument
390 fetch_texcoord_impl(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
435 fetch_texcoord(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
570 primitive_nop_triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
574 primitive_clip_triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
614 triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
631 lerp_triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
715 lerp_texcoords(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
759 lerp_texcoords_w(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
826 cull_triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
850 clip_triangle(ogles_context_t* c, vertex_t* v0, vertex_t* v1, vertex_t* v2) argument
[all...]
H A Darray.cpp655 vertex_t *v, *v0, *v1, *v2;
679 v2 = v++;
680 const uint32_t cc = v0->flags & v1->flags & v2->flags;
682 c->prims.renderTriangle(c, v0, v1, v2);
683 swap(((winding^=1) ? v1 : v0), v2);
868 vertex_t* v2; local
879 v2 = fetch_vertex(c, read_index(type, indices));
880 const uint32_t cc = v0->flags & v1->flags & v2->flags;
882 c->prims.renderTriangle(c, v0, v1, v2);
885 consumed = v2;
915 vertex_t* const v2 = fetch_vertex(c, *p++); local
929 vertex_t* const v2 = fetch_vertex(c, *p++); local
[all...]
/frameworks/rs/scriptc/
H A Drs_cl.rsh111 _RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float2 v2); \
112 _RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float3 v2); \
113 _RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2);
116 _RS_RUNTIME float __attribute__((overloadable)) fnc(float2 v1, float2 v2); \
117 _RS_RUNTIME float __attribute__((overloadable)) fnc(float3 v1, float3 v2); \
118 _RS_RUNTIME float __attribute__((overloadable)) fnc(float4 v1, float4 v2);
121 _RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, float v2); \
122 _RS_RUNTIME float3 __attribute__((overloadable)) fnc(float3 v1, float v2); \
123 _RS_RUNTIME float4 __attribute__((overloadable)) fnc(float4 v1, float v2);
126 _RS_RUNTIME float2 __attribute__((overloadable)) fnc(float2 v1, int2 v2); \
[all...]
/frameworks/av/media/libstagefright/codecs/m4v_h263/dec/src/
H A Dconceal.cpp142 uint8 *y1, *y2, *u1, *u2, *v1, *v2; local
159 v2 = prevFrame + size + (size >> 2) + chrstart;
182 oscl_memcpy(v1, v2, B_SIZE);
184 v2 += width_C;
185 oscl_memcpy(v1, v2, B_SIZE);
187 v2 += width_C;
/frameworks/base/libs/hwui/
H A DPatch.cpp169 float v2 = fmax(0.0f, stepY - vOffset) / bitmapHeight; local
177 generateRow(vertex, y1, y2, v1, v2, stretchX, rescaleX, right - left,
217 void Patch::generateRow(TextureVertex*& vertex, float y1, float y2, float v1, float v2, argument
245 generateQuad(vertex, x1, y1, x2, y2, u1, v1, u2, v2, quadCount);
263 generateQuad(vertex, x1, y1, x2, y2, u1, v1, 1.0f, v2, quadCount);
268 float u1, float v1, float u2, float v2, uint32_t& quadCount) {
282 PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.4f, %.4f", x2, y2, u2, v2);
296 TextureVertex::set(vertex++, x1, y2, u1, v2);
299 TextureVertex::set(vertex++, x1, y2, u1, v2);
267 generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2, uint32_t& quadCount) argument
[all...]
H A DPatch.h76 float v1, float v2, float stretchX, float rescaleX,
80 float u1, float v1, float u2, float v2,
H A DFontRenderer.h126 float x2, float y2, float u2, float v2,
130 float x2, float y2, float u2, float v2,
134 float x2, float y2, float u2, float v2,
/frameworks/rs/cpu_ref/
H A DrsCpuIntrinsic3DLUT.cpp135 uint4 v2 = (v + 0x7f) >> (int4)8; local
137 uchar4 ret = convert_uchar4(v2);
154 ALOGE("v2 %08x %08x %08x %08x", v2.x, v2.y, v2.z, v2.w);
/frameworks/base/libs/hwui/font/
H A DCacheTexture.h149 float x2, float y2, float u2, float v2,
154 TextureVertex::set(mesh++, x2, y2, u2, v2);
148 addQuad(float x1, float y1, float u1, float v1, float x2, float y2, float u2, float v2, float x3, float y3, float u3, float v3, float x4, float y4, float u4, float v4) argument
H A DFont.cpp169 float v2 = glyph->mBitmapMaxV; local
171 mState->appendMeshQuad(nPenX, nPenY, u1, v2,
172 nPenX + width, nPenY, u2, v2,
195 float v2 = glyph->mBitmapMaxV; local
198 p[0].x(), p[0].y(), u1, v2,
199 p[1].x(), p[1].y(), u2, v2,
250 const float v2 = glyph->mBitmapMaxV; local
254 position->y() + destination[0].y(), u1, v2,
256 position->y() + destination[1].y(), u2, v2,
/frameworks/compile/mclinker/unittests/
H A DGCFactoryListTraitsTest.cpp65 #define CHECK_LIST_VALUE(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) do { \
68 CHECK_NODE_VALUE(v2); \
/frameworks/rs/java/tests/ImageProcessing/src/com/android/rs/image/
H A Dcolorcube.rs68 uint4 v2 = (v + 0x7f) >> (int4)8;
70 *out = convert_uchar4(v2);
84 //rsDebug("v2", v2);
/frameworks/rs/java/tests/ImageProcessing2/src/com/android/rs/image/
H A Dcolorcube.rs68 uint4 v2 = (v + 0x7f) >> (int4)8;
70 *out = convert_uchar4(v2);
84 //rsDebug("v2", v2);
/frameworks/native/opengl/tests/angeles/
H A Ddemo.c169 static void vector3Sub(VECTOR3 *dest, VECTOR3 *v1, VECTOR3 *v2) argument
171 dest->x = v1->x - v2->x;
172 dest->y = v1->y - v2->y;
173 dest->z = v1->z - v2->z;
244 VECTOR3 v1, v2, n; local
259 vector3Sub(&v2, &pd, &pa);
264 * v2.x v2.y v2.z | v2
[all...]
/frameworks/native/services/surfaceflinger/
H A DTransform.cpp73 const float v2 = A[2][i]; local
74 D[0][i] = v0*B[0][0] + v1*B[0][1] + v2*B[0][2];
75 D[1][i] = v0*B[1][0] + v1*B[1][1] + v2*B[1][2];
76 D[2][i] = v0*B[2][0] + v1*B[2][1] + v2*B[2][2];
/frameworks/rs/driver/
H A DrsdGL.h94 float x2, float y2, float z2, float u2, float v2,

Completed in 639 milliseconds

12