dfxvideo: remove unneeded double division in line code
[pcsx_rearmed.git] / libpcsxcore / gte_arm.s
CommitLineData
59774ed0 1/*
2 * (C) GraÅžvydas "notaz" Ignotas, 2011
3 *
4 * This work is licensed under the terms of any of these licenses
5 * (at your option):
6 * - GNU GPL, version 2 or later.
7 * - GNU LGPL, version 2.1 or later.
8 * See the COPYING file in the top-level directory.
9 */
10
11/* .equiv HAVE_ARMV7, 1 */
12
13.text
14.align 2
15
16.macro sgnxt16 reg
17.if HAVE_ARMV7
18 sxth \reg, \reg
19.else
20 lsl \reg, \reg, #16
21 asr \reg, \reg, #16
22.endif
23.endm
24
25
26.global gteNCLIP_arm @ r0=CP2 (d,c),
27gteNCLIP_arm:
28 push {r4-r6,lr}
29
30 add r1, r0, #4*12
31 ldmia r1, {r1-r3}
32 mov r4, r1, asr #16
33 mov r5, r2, asr #16
34 mov r6, r3, asr #16
35 sub r12, r4, r5 @ 3: gteSY0 - gteSY1
36 sub r5, r5, r6 @ 1: gteSY1 - gteSY2
37 sgnxt16 r1
38 smull r1, r5, r1, r5 @ RdLo, RdHi
39 sub r6, r4 @ 2: gteSY2 - gteSY0
40 sgnxt16 r2
41 smlal r1, r5, r2, r6
42 mov lr, #0 @ gteFLAG
43 sgnxt16 r3
44 smlal r1, r5, r3, r12
45 mov r6, #1<<31
46 orr r6, #1<<15
47 movs r2, r1, lsl #1
48 adc r5, r5
49 cmp r5, #0
50.if HAVE_ARMV7
51 movtgt lr, #((1<<31)|(1<<16))>>16
52.else
53 movgt lr, #(1<<31)
54 orrgt lr, #(1<<16)
55.endif
56 mvngt r1, #1<<31 @ maxint
57 cmn r5, #1
58 movmi r1, #1<<31 @ minint
59 orrmi lr, r6
60 str r1, [r0, #4*24]
61 str lr, [r0, #4*(32+31)] @ gteFLAG
62
63 pop {r4-r6,pc}
64 .size gteNCLIP_arm, .-gteNCLIP_arm
65
66
67@ vim:filetype=armasm
68