| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 1 | /* libs/opengles/iterators.S | 
|  | 2 | ** | 
|  | 3 | ** Copyright 2006, The Android Open Source Project | 
|  | 4 | ** | 
|  | 5 | ** Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 6 | ** you may not use this file except in compliance with the License. | 
|  | 7 | ** You may obtain a copy of the License at | 
|  | 8 | ** | 
|  | 9 | **     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 10 | ** | 
|  | 11 | ** Unless required by applicable law or agreed to in writing, software | 
|  | 12 | ** distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 13 | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 14 | ** See the License for the specific language governing permissions and | 
|  | 15 | ** limitations under the License. | 
|  | 16 | */ | 
|  | 17 |  | 
|  | 18 |  | 
|  | 19 | .text | 
| synergy dev | dd46c86 | 2014-02-23 23:43:26 -0800 | [diff] [blame] | 20 | .align 2 | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 21 | .arm | 
|  | 22 |  | 
|  | 23 | .global iterators0032 | 
| Doug Kwan | 9054ddf | 2009-12-07 13:21:24 -0800 | [diff] [blame] | 24 | .type iterators0032, %function | 
| The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 25 |  | 
|  | 26 | /* | 
|  | 27 | * iterators0032 | 
|  | 28 | * | 
|  | 29 | * MUST BE CALLED FROM ARM CODE | 
|  | 30 | * | 
|  | 31 | * r0: const compute_iterators_t* (this) | 
|  | 32 | *      r0 + 0: m_dx01 | 
|  | 33 | *      r0 + 4: m_dy10 | 
|  | 34 | *      r0 + 8: m_dx20 | 
|  | 35 | *      r0 +12: m_dy02 | 
|  | 36 | *      r0 +16: m_x0 | 
|  | 37 | *      r0 +20: m_y0 | 
|  | 38 | *      r0 +24: m_area | 
|  | 39 | *		r0 +28: m_scale | 
|  | 40 | *		r0 +29: m_area_scale; | 
|  | 41 | * r1: int32_t* (out) | 
|  | 42 | *      r1 + 0: c | 
|  | 43 | *      r1 + 4: dcdx | 
|  | 44 | *      r1 + 8: dcdy | 
|  | 45 | *   r2: c0 | 
|  | 46 | *   r3: c1 | 
|  | 47 | * [sp]: c2 | 
|  | 48 | */ | 
|  | 49 |  | 
|  | 50 | iterators0032: | 
|  | 51 | stmfd	sp!, {r4, r5, r6, r7, r8, lr} | 
|  | 52 | ldr     r4, [sp, #4*6] | 
|  | 53 |  | 
|  | 54 | ldrb    r12, [r0, #29] | 
|  | 55 | sub     r3, r3, r2 | 
|  | 56 | sub     r4, r4, r2 | 
|  | 57 | sub     r12, r12, #16 | 
|  | 58 | mov     r3, r3, asr r12 | 
|  | 59 | mov     r4, r4, asr r12 | 
|  | 60 |  | 
|  | 61 | ldr     r5, [r0, #0] | 
|  | 62 | ldr     r12, [r0, #4] | 
|  | 63 | smull   r8, lr, r4, r5 | 
|  | 64 | ldr     r5, [r0, #8] | 
|  | 65 | smull   r6, r7, r4, r12 | 
|  | 66 | ldr     r12, [r0, #12] | 
|  | 67 | smlal   r8, lr, r3, r5 | 
|  | 68 | smlal   r6, r7, r3, r12 | 
|  | 69 |  | 
|  | 70 | ldr     r3, [r0, #16]        // m_x0 | 
|  | 71 | ldr     r4, [r0, #20]        // m_x1 | 
|  | 72 |  | 
|  | 73 | str     r6, [r1, #4] | 
|  | 74 | str     r8, [r1, #8] | 
|  | 75 |  | 
|  | 76 | umull   r6, r5, r3, r6 | 
|  | 77 | umull   r8, r0, r4, r8 | 
|  | 78 | mla     r7, r3, r7, r5 | 
|  | 79 | mla     lr, r4, lr, r0 | 
|  | 80 | adds    r6, r6, r8 | 
|  | 81 | adc     r7, r7, lr | 
|  | 82 |  | 
|  | 83 | movs    r6, r6, lsr #4 | 
|  | 84 | adc     r6, r6, r7, lsl #28 | 
|  | 85 | rsb     r6, r6, r2, lsl #16 | 
|  | 86 | str     r6, [r1, #0] | 
|  | 87 |  | 
|  | 88 | ldmfd	sp!, {r4, r5, r6, r7, r8, pc} | 
|  | 89 |  |