From: Jon TURNEY Date: Fri, 6 Jul 2012 23:53:31 +0000 (+0100) Subject: Rename sparc/clip.S -> sparc/sparc_clip.S X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8676890018a94b475dd0bb7389f3b77f37e36fdb;p=mesa.git Rename sparc/clip.S -> sparc/sparc_clip.S Automake can't handle having both clip.S and clip.c, even though they have different paths "src/mesa/Makefile.am: object `clip.lo' created by `$(SRCDIR)/sparc/clip.S' and `$(SRCDIR)/main/clip.c'" Signed-off-by: Jon TURNEY Reviewed-by: Matt Turner Reviewed-by: Eric Anholt Tested-by: Matt Turner --- diff --git a/src/mesa/SConscript b/src/mesa/SConscript index 819a0fd7d29..906c57962dd 100644 --- a/src/mesa/SConscript +++ b/src/mesa/SConscript @@ -430,7 +430,7 @@ if env['gcc'] and env['platform'] not in ('darwin', 'windows'): elif env['machine'] == 'sparc': mesa_sources += [ 'sparc/sparc.c', - 'sparc/clip.S', + 'sparc/sparc_clip.S', 'sparc/norm.S', 'sparc/xform.S', ] diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak index 16b1c39c06a..d22f0595c53 100644 --- a/src/mesa/sources.mak +++ b/src/mesa/sources.mak @@ -307,7 +307,7 @@ X86_64_FILES = \ $(SRCDIR)/x86-64/xform4.S SPARC_FILES = \ - $(SRCDIR)/sparc/clip.S \ + $(SRCDIR)/sparc/sparc_clip.S \ $(SRCDIR)/sparc/norm.S \ $(SRCDIR)/sparc/xform.S diff --git a/src/mesa/sparc/clip.S b/src/mesa/sparc/clip.S deleted file mode 100644 index dc239171ff9..00000000000 --- a/src/mesa/sparc/clip.S +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Clip testing in SPARC assembly - */ - -#if __arch64__ -#define LDPTR ldx -#define V4F_DATA 0x00 -#define V4F_START 0x08 -#define V4F_COUNT 0x10 -#define V4F_STRIDE 0x14 -#define V4F_SIZE 0x18 -#define V4F_FLAGS 0x1c -#else -#define LDPTR ld -#define V4F_DATA 0x00 -#define V4F_START 0x04 -#define V4F_COUNT 0x08 -#define V4F_STRIDE 0x0c -#define V4F_SIZE 0x10 -#define V4F_FLAGS 0x14 -#endif - -#define VEC_SIZE_1 1 -#define VEC_SIZE_2 3 -#define VEC_SIZE_3 7 -#define VEC_SIZE_4 15 - - .register %g2, #scratch - .register %g3, #scratch - - .text - .align 64 - -one_dot_zero: - .word 0x3f800000 /* 1.0f */ - - /* This trick is shamelessly stolen from the x86 - * Mesa asm. Very clever, and we can do it too - * since we have the necessary add with carry - * instructions on Sparc. - */ -clip_table: - .byte 0, 1, 0, 2, 4, 5, 4, 6 - .byte 0, 1, 0, 2, 8, 9, 8, 10 - .byte 32, 33, 32, 34, 36, 37, 36, 38 - .byte 32, 33, 32, 34, 40, 41, 40, 42 - .byte 0, 1, 0, 2, 4, 5, 4, 6 - .byte 0, 1, 0, 2, 8, 9, 8, 10 - .byte 16, 17, 16, 18, 20, 21, 20, 22 - .byte 16, 17, 16, 18, 24, 25, 24, 26 - .byte 63, 61, 63, 62, 55, 53, 55, 54 - .byte 63, 61, 63, 62, 59, 57, 59, 58 - .byte 47, 45, 47, 46, 39, 37, 39, 38 - .byte 47, 45, 47, 46, 43, 41, 43, 42 - .byte 63, 61, 63, 62, 55, 53, 55, 54 - .byte 63, 61, 63, 62, 59, 57, 59, 58 - .byte 31, 29, 31, 30, 23, 21, 23, 22 - .byte 31, 29, 31, 30, 27, 25, 27, 26 - -/* GLvector4f *clip_vec, GLvector4f *proj_vec, - GLubyte clipMask[], GLubyte *orMask, GLubyte *andMask, - GLboolean viewport_z_enable */ - - .align 64 -__pc_tramp: - retl - nop - - .globl _mesa_sparc_cliptest_points4 -_mesa_sparc_cliptest_points4: - save %sp, -64, %sp - call __pc_tramp - sub %o7, (. - one_dot_zero - 4), %g1 - ld [%g1 + 0x0], %f4 - add %g1, 0x4, %g1 - - ld [%i0 + V4F_STRIDE], %l1 - ld [%i0 + V4F_COUNT], %l3 - LDPTR [%i0 + V4F_START], %i0 - LDPTR [%i1 + V4F_START], %i5 - ldub [%i3], %g2 - ldub [%i4], %g3 - sll %g3, 8, %g3 - or %g2, %g3, %g2 - - ld [%i1 + V4F_FLAGS], %g3 - or %g3, VEC_SIZE_4, %g3 - st %g3, [%i1 + V4F_FLAGS] - mov 3, %g3 - st %g3, [%i1 + V4F_SIZE] - st %l3, [%i1 + V4F_COUNT] - clr %l2 - clr %l0 - - /* l0: i - * l3: count - * l1: stride - * l2: c - * g2: (tmpAndMask << 8) | tmpOrMask - * g1: clip_table - * i0: from[stride][i] - * i2: clipMask - * i5: vProj[4][i] - */ - -1: ld [%i0 + 0x0c], %f3 ! LSU Group - ld [%i0 + 0x0c], %g5 ! LSU Group - ld [%i0 + 0x08], %g4 ! LSU Group - fdivs %f4, %f3, %f8 ! FGM - addcc %g5, %g5, %g5 ! IEU1 Group - addx %g0, 0x0, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - ld [%i0 + 0x04], %g4 ! LSU Group - addx %g3, %g3, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - ld [%i0 + 0x00], %g4 ! LSU Group - addx %g3, %g3, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - ldub [%g1 + %g3], %g3 ! LSU Group - cmp %g3, 0 ! IEU1 Group, stall - be 2f ! CTI - stb %g3, [%i2] ! LSU - sll %g3, 8, %g4 ! IEU1 Group - add %l2, 1, %l2 ! IEU0 - st %g0, [%i5 + 0x00] ! LSU - or %g4, 0xff, %g4 ! IEU0 Group - or %g2, %g3, %g2 ! IEU1 - st %g0, [%i5 + 0x04] ! LSU - and %g2, %g4, %g2 ! IEU0 Group - st %g0, [%i5 + 0x08] ! LSU - b 3f ! CTI - st %f4, [%i5 + 0x0c] ! LSU Group -2: ld [%i0 + 0x00], %f0 ! LSU Group - ld [%i0 + 0x04], %f1 ! LSU Group - ld [%i0 + 0x08], %f2 ! LSU Group - fmuls %f0, %f8, %f0 ! FGM - st %f0, [%i5 + 0x00] ! LSU Group - fmuls %f1, %f8, %f1 ! FGM - st %f1, [%i5 + 0x04] ! LSU Group - fmuls %f2, %f8, %f2 ! FGM - st %f2, [%i5 + 0x08] ! LSU Group - st %f8, [%i5 + 0x0c] ! LSU Group -3: add %i5, 0x10, %i5 ! IEU1 - add %l0, 1, %l0 ! IEU0 Group - add %i2, 1, %i2 ! IEU0 Group - cmp %l0, %l3 ! IEU1 Group - bne 1b ! CTI - add %i0, %l1, %i0 ! IEU0 Group - stb %g2, [%i3] ! LSU - srl %g2, 8, %g3 ! IEU0 Group - cmp %l2, %l3 ! IEU1 Group - bl,a 1f ! CTI - clr %g3 ! IEU0 -1: stb %g3, [%i4] ! LSU Group - ret ! CTI Group - restore %i1, 0x0, %o0 - - .globl _mesa_sparc_cliptest_points4_np -_mesa_sparc_cliptest_points4_np: - save %sp, -64, %sp - - call __pc_tramp - sub %o7, (. - one_dot_zero - 4), %g1 - add %g1, 0x4, %g1 - - ld [%i0 + V4F_STRIDE], %l1 - ld [%i0 + V4F_COUNT], %l3 - LDPTR [%i0 + V4F_START], %i0 - ldub [%i3], %g2 - ldub [%i4], %g3 - sll %g3, 8, %g3 - or %g2, %g3, %g2 - - clr %l2 - clr %l0 - - /* l0: i - * l3: count - * l1: stride - * l2: c - * g2: (tmpAndMask << 8) | tmpOrMask - * g1: clip_table - * i0: from[stride][i] - * i2: clipMask - */ - -1: ld [%i0 + 0x0c], %g5 ! LSU Group - ld [%i0 + 0x08], %g4 ! LSU Group - addcc %g5, %g5, %g5 ! IEU1 Group - addx %g0, 0x0, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - ld [%i0 + 0x04], %g4 ! LSU Group - addx %g3, %g3, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - ld [%i0 + 0x00], %g4 ! LSU Group - addx %g3, %g3, %g3 ! IEU1 Group - addcc %g4, %g4, %g4 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - subcc %g5, %g4, %g0 ! IEU1 Group - addx %g3, %g3, %g3 ! IEU1 Group - ldub [%g1 + %g3], %g3 ! LSU Group - cmp %g3, 0 ! IEU1 Group, stall - be 2f ! CTI - stb %g3, [%i2] ! LSU - sll %g3, 8, %g4 ! IEU1 Group - add %l2, 1, %l2 ! IEU0 - or %g4, 0xff, %g4 ! IEU0 Group - or %g2, %g3, %g2 ! IEU1 - and %g2, %g4, %g2 ! IEU0 Group -2: add %l0, 1, %l0 ! IEU0 Group - add %i2, 1, %i2 ! IEU0 Group - cmp %l0, %l3 ! IEU1 Group - bne 1b ! CTI - add %i0, %l1, %i0 ! IEU0 Group - stb %g2, [%i3] ! LSU - srl %g2, 8, %g3 ! IEU0 Group - cmp %l2, %l3 ! IEU1 Group - bl,a 1f ! CTI - clr %g3 ! IEU0 -1: stb %g3, [%i4] ! LSU Group - ret ! CTI Group - restore %i1, 0x0, %o0 diff --git a/src/mesa/sparc/sparc_clip.S b/src/mesa/sparc/sparc_clip.S new file mode 100644 index 00000000000..dc239171ff9 --- /dev/null +++ b/src/mesa/sparc/sparc_clip.S @@ -0,0 +1,233 @@ +/* + * Clip testing in SPARC assembly + */ + +#if __arch64__ +#define LDPTR ldx +#define V4F_DATA 0x00 +#define V4F_START 0x08 +#define V4F_COUNT 0x10 +#define V4F_STRIDE 0x14 +#define V4F_SIZE 0x18 +#define V4F_FLAGS 0x1c +#else +#define LDPTR ld +#define V4F_DATA 0x00 +#define V4F_START 0x04 +#define V4F_COUNT 0x08 +#define V4F_STRIDE 0x0c +#define V4F_SIZE 0x10 +#define V4F_FLAGS 0x14 +#endif + +#define VEC_SIZE_1 1 +#define VEC_SIZE_2 3 +#define VEC_SIZE_3 7 +#define VEC_SIZE_4 15 + + .register %g2, #scratch + .register %g3, #scratch + + .text + .align 64 + +one_dot_zero: + .word 0x3f800000 /* 1.0f */ + + /* This trick is shamelessly stolen from the x86 + * Mesa asm. Very clever, and we can do it too + * since we have the necessary add with carry + * instructions on Sparc. + */ +clip_table: + .byte 0, 1, 0, 2, 4, 5, 4, 6 + .byte 0, 1, 0, 2, 8, 9, 8, 10 + .byte 32, 33, 32, 34, 36, 37, 36, 38 + .byte 32, 33, 32, 34, 40, 41, 40, 42 + .byte 0, 1, 0, 2, 4, 5, 4, 6 + .byte 0, 1, 0, 2, 8, 9, 8, 10 + .byte 16, 17, 16, 18, 20, 21, 20, 22 + .byte 16, 17, 16, 18, 24, 25, 24, 26 + .byte 63, 61, 63, 62, 55, 53, 55, 54 + .byte 63, 61, 63, 62, 59, 57, 59, 58 + .byte 47, 45, 47, 46, 39, 37, 39, 38 + .byte 47, 45, 47, 46, 43, 41, 43, 42 + .byte 63, 61, 63, 62, 55, 53, 55, 54 + .byte 63, 61, 63, 62, 59, 57, 59, 58 + .byte 31, 29, 31, 30, 23, 21, 23, 22 + .byte 31, 29, 31, 30, 27, 25, 27, 26 + +/* GLvector4f *clip_vec, GLvector4f *proj_vec, + GLubyte clipMask[], GLubyte *orMask, GLubyte *andMask, + GLboolean viewport_z_enable */ + + .align 64 +__pc_tramp: + retl + nop + + .globl _mesa_sparc_cliptest_points4 +_mesa_sparc_cliptest_points4: + save %sp, -64, %sp + call __pc_tramp + sub %o7, (. - one_dot_zero - 4), %g1 + ld [%g1 + 0x0], %f4 + add %g1, 0x4, %g1 + + ld [%i0 + V4F_STRIDE], %l1 + ld [%i0 + V4F_COUNT], %l3 + LDPTR [%i0 + V4F_START], %i0 + LDPTR [%i1 + V4F_START], %i5 + ldub [%i3], %g2 + ldub [%i4], %g3 + sll %g3, 8, %g3 + or %g2, %g3, %g2 + + ld [%i1 + V4F_FLAGS], %g3 + or %g3, VEC_SIZE_4, %g3 + st %g3, [%i1 + V4F_FLAGS] + mov 3, %g3 + st %g3, [%i1 + V4F_SIZE] + st %l3, [%i1 + V4F_COUNT] + clr %l2 + clr %l0 + + /* l0: i + * l3: count + * l1: stride + * l2: c + * g2: (tmpAndMask << 8) | tmpOrMask + * g1: clip_table + * i0: from[stride][i] + * i2: clipMask + * i5: vProj[4][i] + */ + +1: ld [%i0 + 0x0c], %f3 ! LSU Group + ld [%i0 + 0x0c], %g5 ! LSU Group + ld [%i0 + 0x08], %g4 ! LSU Group + fdivs %f4, %f3, %f8 ! FGM + addcc %g5, %g5, %g5 ! IEU1 Group + addx %g0, 0x0, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + ld [%i0 + 0x04], %g4 ! LSU Group + addx %g3, %g3, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + ld [%i0 + 0x00], %g4 ! LSU Group + addx %g3, %g3, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + ldub [%g1 + %g3], %g3 ! LSU Group + cmp %g3, 0 ! IEU1 Group, stall + be 2f ! CTI + stb %g3, [%i2] ! LSU + sll %g3, 8, %g4 ! IEU1 Group + add %l2, 1, %l2 ! IEU0 + st %g0, [%i5 + 0x00] ! LSU + or %g4, 0xff, %g4 ! IEU0 Group + or %g2, %g3, %g2 ! IEU1 + st %g0, [%i5 + 0x04] ! LSU + and %g2, %g4, %g2 ! IEU0 Group + st %g0, [%i5 + 0x08] ! LSU + b 3f ! CTI + st %f4, [%i5 + 0x0c] ! LSU Group +2: ld [%i0 + 0x00], %f0 ! LSU Group + ld [%i0 + 0x04], %f1 ! LSU Group + ld [%i0 + 0x08], %f2 ! LSU Group + fmuls %f0, %f8, %f0 ! FGM + st %f0, [%i5 + 0x00] ! LSU Group + fmuls %f1, %f8, %f1 ! FGM + st %f1, [%i5 + 0x04] ! LSU Group + fmuls %f2, %f8, %f2 ! FGM + st %f2, [%i5 + 0x08] ! LSU Group + st %f8, [%i5 + 0x0c] ! LSU Group +3: add %i5, 0x10, %i5 ! IEU1 + add %l0, 1, %l0 ! IEU0 Group + add %i2, 1, %i2 ! IEU0 Group + cmp %l0, %l3 ! IEU1 Group + bne 1b ! CTI + add %i0, %l1, %i0 ! IEU0 Group + stb %g2, [%i3] ! LSU + srl %g2, 8, %g3 ! IEU0 Group + cmp %l2, %l3 ! IEU1 Group + bl,a 1f ! CTI + clr %g3 ! IEU0 +1: stb %g3, [%i4] ! LSU Group + ret ! CTI Group + restore %i1, 0x0, %o0 + + .globl _mesa_sparc_cliptest_points4_np +_mesa_sparc_cliptest_points4_np: + save %sp, -64, %sp + + call __pc_tramp + sub %o7, (. - one_dot_zero - 4), %g1 + add %g1, 0x4, %g1 + + ld [%i0 + V4F_STRIDE], %l1 + ld [%i0 + V4F_COUNT], %l3 + LDPTR [%i0 + V4F_START], %i0 + ldub [%i3], %g2 + ldub [%i4], %g3 + sll %g3, 8, %g3 + or %g2, %g3, %g2 + + clr %l2 + clr %l0 + + /* l0: i + * l3: count + * l1: stride + * l2: c + * g2: (tmpAndMask << 8) | tmpOrMask + * g1: clip_table + * i0: from[stride][i] + * i2: clipMask + */ + +1: ld [%i0 + 0x0c], %g5 ! LSU Group + ld [%i0 + 0x08], %g4 ! LSU Group + addcc %g5, %g5, %g5 ! IEU1 Group + addx %g0, 0x0, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + ld [%i0 + 0x04], %g4 ! LSU Group + addx %g3, %g3, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + ld [%i0 + 0x00], %g4 ! LSU Group + addx %g3, %g3, %g3 ! IEU1 Group + addcc %g4, %g4, %g4 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + subcc %g5, %g4, %g0 ! IEU1 Group + addx %g3, %g3, %g3 ! IEU1 Group + ldub [%g1 + %g3], %g3 ! LSU Group + cmp %g3, 0 ! IEU1 Group, stall + be 2f ! CTI + stb %g3, [%i2] ! LSU + sll %g3, 8, %g4 ! IEU1 Group + add %l2, 1, %l2 ! IEU0 + or %g4, 0xff, %g4 ! IEU0 Group + or %g2, %g3, %g2 ! IEU1 + and %g2, %g4, %g2 ! IEU0 Group +2: add %l0, 1, %l0 ! IEU0 Group + add %i2, 1, %i2 ! IEU0 Group + cmp %l0, %l3 ! IEU1 Group + bne 1b ! CTI + add %i0, %l1, %i0 ! IEU0 Group + stb %g2, [%i3] ! LSU + srl %g2, 8, %g3 ! IEU0 Group + cmp %l2, %l3 ! IEU1 Group + bl,a 1f ! CTI + clr %g3 ! IEU0 +1: stb %g3, [%i4] ! LSU Group + ret ! CTI Group + restore %i1, 0x0, %o0