aboutsummaryrefslogtreecommitdiff
path: root/plugins/gpu_unai/gpu_inner_light.h
diff options
context:
space:
mode:
authornotaz2011-08-12 01:17:36 +0300
committernotaz2011-08-13 00:56:40 +0300
commit1db5bc1ed7f992d7c2686f5359e53301eba2b2ca (patch)
tree951af157c0c23d247590df443ac514181bf9a635 /plugins/gpu_unai/gpu_inner_light.h
parent53636f1583b53672d6908eff1aeff7213ee11e34 (diff)
downloadpcsx_rearmed-1db5bc1ed7f992d7c2686f5359e53301eba2b2ca.tar.gz
pcsx_rearmed-1db5bc1ed7f992d7c2686f5359e53301eba2b2ca.tar.bz2
pcsx_rearmed-1db5bc1ed7f992d7c2686f5359e53301eba2b2ca.zip
gpu_unai: fix inline asm statements
newer gcc reorders them and was allocating registers wrong due to incomplete constraints. Not that this code is any better than what gcc generates anyway, but whatever.
Diffstat (limited to 'plugins/gpu_unai/gpu_inner_light.h')
-rw-r--r--plugins/gpu_unai/gpu_inner_light.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/plugins/gpu_unai/gpu_inner_light.h b/plugins/gpu_unai/gpu_inner_light.h
index b9e48bc..d291418 100644
--- a/plugins/gpu_unai/gpu_inner_light.h
+++ b/plugins/gpu_unai/gpu_inner_light.h
@@ -27,11 +27,13 @@
#define gpuLightingRGB(uSrc,lCol) \
{ \
u32 cb,cg; \
- asm ("and %[cb], %[lCol], #0x7C00/32 " : [cb] "=r" (cb) : [lCol] "r" (lCol) ); \
- asm ("and %[cg], %[lCol], #0x03E0*2048 " : [cg] "=r" (cg) : [lCol] "r" (lCol) ); \
- asm ("mov %[res], %[lCol], lsr #27 " : [res] "=r" (uSrc) : [lCol] "r" (lCol) ); \
- asm ("orr %[res], %[res], %[cb], lsl #5 " : [res] "=r" (uSrc) : "0" (uSrc), [cb] "r" (cb) ); \
- asm ("orr %[res], %[res], %[cg], lsr #11 " : [res] "=r" (uSrc) : "0" (uSrc), [cg] "r" (cg) ); \
+ asm ("and %[cb], %[lCol], #0x7C00/32 \n" \
+ "and %[cg], %[lCol], #0x03E0*2048 \n" \
+ "mov %[res], %[lCol], lsr #27\n" \
+ "orr %[res], %[res], %[cb], lsl #5 \n" \
+ "orr %[res], %[res], %[cg], lsr #11\n" \
+ : [res] "=&r" (uSrc), [cb] "=&r" (cb), [cg] "=&r" (cg) \
+ : [lCol] "r" (lCol)); \
}
#else
#define gpuLightingRGB(uSrc,lCol) uSrc=((lCol<<5)&0x7C00) | ((lCol>>11)&0x3E0) | (lCol>>27)