19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* libs/opengles/iterators.S 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .text 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .align 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .arm 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .global iterators0032 2489fe245e0402db9b0101ad969af5698e1d6fe311Doug Kwan .type iterators0032, %function 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * iterators0032 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MUST BE CALLED FROM ARM CODE 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0: const compute_iterators_t* (this) 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 + 0: m_dx01 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 + 4: m_dy10 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 + 8: m_dx20 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +12: m_dy02 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +16: m_x0 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +20: m_y0 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +24: m_area 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +28: m_scale 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r0 +29: m_area_scale; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r1: int32_t* (out) 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r1 + 0: c 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r1 + 4: dcdx 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r1 + 8: dcdy 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r2: c0 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * r3: c1 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * [sp]: c2 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectiterators0032: 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stmfd sp!, {r4, r5, r6, r7, r8, lr} 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r4, [sp, #4*6] 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldrb r12, [r0, #29] 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sub r3, r3, r2 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sub r4, r4, r2 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sub r12, r12, #16 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mov r3, r3, asr r12 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mov r4, r4, asr r12 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r5, [r0, #0] 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r12, [r0, #4] 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project smull r8, lr, r4, r5 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r5, [r0, #8] 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project smull r6, r7, r4, r12 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r12, [r0, #12] 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project smlal r8, lr, r3, r5 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project smlal r6, r7, r3, r12 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r3, [r0, #16] // m_x0 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldr r4, [r0, #20] // m_x1 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project str r6, [r1, #4] 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project str r8, [r1, #8] 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project umull r6, r5, r3, r6 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project umull r8, r0, r4, r8 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mla r7, r3, r7, r5 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mla lr, r4, lr, r0 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project adds r6, r6, r8 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project adc r7, r7, lr 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project movs r6, r6, lsr #4 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project adc r6, r6, r7, lsl #28 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rsb r6, r6, r2, lsl #16 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project str r6, [r1, #0] 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ldmfd sp!, {r4, r5, r6, r7, r8, pc} 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 90