Browse code

ppu aarch64: clean up

Sigrid Solveig Haflínudóttir authored on 26/12/2021 12:53:23
Showing 1 changed files
... ...
@@ -4,25 +4,21 @@
4 4
 void
5 5
 ppu_redraw(Ppu *p, Uint32 *screen)
6 6
 {
7
-	/* FIXME(sigrid): do this better */
8
-	Uint32 *rgba = __builtin_assume_aligned(screen, 16);
9
-	Uint8 *fg = __builtin_assume_aligned(p->fg.pixels, 16);
10
-	Uint8 *bg = __builtin_assume_aligned(p->bg.pixels, 16);
11
-	Uint8 *palette = __builtin_assume_aligned((Uint8*)p->palette, 16);
12
-	uint8x16x4_t pal = vld4q_u8(palette); enum { R, G, B, A };
7
+	uint8x16x4_t pal = vld4q_u8((Uint8*)p->palette);
8
+	Uint8 *fg = p->fg.pixels;
9
+	Uint8 *bg = p->bg.pixels;
13 10
 	int i;
14 11
 
15
-	for(i = 0; i < p->width * p->height; i += 16, fg += 16, bg += 16, rgba += 16) {
12
+	for(i = 0; i < p->width * p->height; i += 16, fg += 16, bg += 16, screen += 16) {
16 13
 		uint8x16_t fg8 = vld1q_u8(fg);
17 14
 		uint8x16_t bg8 = vld1q_u8(bg);
18
-		uint8x16_t bgmask = vceqzq_u8(fg8);
19
-		uint8x16_t px8 = vorrq_u8(vandq_u8(bg8, bgmask), vandq_u8(fg8, vceqzq_u8(bgmask)));
15
+		uint8x16_t px8 = vbslq_u8(vceqzq_u8(fg8), bg8, fg8);
20 16
 		uint8x16x4_t px = {
21
-			vqtbl1q_u8(pal.val[R], px8),
22
-			vqtbl1q_u8(pal.val[G], px8),
23
-			vqtbl1q_u8(pal.val[B], px8),
24
-			vqtbl1q_u8(pal.val[A], px8),
17
+			vqtbl1q_u8(pal.val[0], px8),
18
+			vqtbl1q_u8(pal.val[1], px8),
19
+			vqtbl1q_u8(pal.val[2], px8),
20
+			vdupq_n_u8(0xff),
25 21
 		};
26
-		vst4q_u8((uint8_t*)rgba, px);
22
+		vst4q_u8((uint8_t*)screen, px);
27 23
 	}
28 24
 }