Module Name:    src
Committed By:   rin
Date:           Mon Jul 29 14:59:25 UTC 2019

Modified Files:
        src/sys/dev/rasops: rasops_putchar_aa.h

Log Message:
Simplify and tiny optimization.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/rasops/rasops_putchar_aa.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/rasops/rasops_putchar_aa.h
diff -u src/sys/dev/rasops/rasops_putchar_aa.h:1.2 src/sys/dev/rasops/rasops_putchar_aa.h:1.3
--- src/sys/dev/rasops/rasops_putchar_aa.h:1.2	Mon Jul 29 14:06:32 2019
+++ src/sys/dev/rasops/rasops_putchar_aa.h	Mon Jul 29 14:59:25 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops_putchar_aa.h,v 1.2 2019/07/29 14:06:32 rin Exp $ */
+/* $NetBSD: rasops_putchar_aa.h,v 1.3 2019/07/29 14:59:25 rin Exp $ */
 
 /* NetBSD: rasops8.c,v 1.43 2019/07/28 12:06:10 rin Exp */
 /*-
@@ -51,30 +51,23 @@
 #endif
 
 #if RASOPS_DEPTH != 24
+#define	COLOR_TYPE	PIXEL_TYPE
 #define	PIXEL_LEN	sizeof(PIXEL_TYPE)
 #define	BUF_LEN		MAX_WIDTH
 #define	SET_PIXEL(x, c)	buf[x] = clr[c]
-#endif /* RASOPS_DEPTH != 24 */
+#endif
 
 #if RASOPS_DEPTH == 24
+#define	COLOR_TYPE	uint32_t
 #define	PIXEL_LEN	3
 #define	BUF_LEN		(MAX_WIDTH * 3)
-#  if BYTE_ORDER == LITTLE_ENDIAN
-#define	ROFF		(ri->ri_rpos / 8)
-#define	GOFF		(ri->ri_gpos / 8)
-#define	BOFF		(ri->ri_bpos / 8)
-#  else	/* BIG_ENDIAN XXX not tested */
-#define	ROFF		(2 - ri->ri_rpos / 8)
-#define	GOFF		(2 - ri->ri_gpos / 8)
-#define	BOFF		(2 - ri->ri_bpos / 8)
-#  endif
 #define	SET_PIXEL(x, c)				\
 	do {					\
-		buf[3 * x + ROFF] = r[c];	\
-		buf[3 * x + GOFF] = g[c];	\
-		buf[3 * x + BOFF] = b[c];	\
+		buf[3 * x + 0] = clr[c] >> 16;	\
+		buf[3 * x + 1] = clr[c] >> 8;	\
+		buf[3 * x + 2] = clr[c];	\
 	} while (0 /* CONSTCOND */)
-#endif /* RASOPS_DEPTH == 24 */
+#endif
 
 #if RASOPS_DEPTH != 8
 #define	SET_BUF(c)	for (x = 0; x < width; x++) { SET_PIXEL(x, c); }
@@ -92,9 +85,7 @@ PUTCHAR_AA(RASOPS_DEPTH)(void *cookie, i
 	uint8_t *fr, aval;
 	PIXEL_TYPE *rp, *hp, R, G, B;
 	PIXEL_TYPE buf[BUF_LEN] __attribute__ ((aligned(8))); /* XXX */
-#if RASOPS_DEPTH != 24
-	PIXEL_TYPE clr[2];
-#endif
+	COLOR_TYPE clr[2];
 
 	hp = NULL;	/* XXX GCC */
 
@@ -123,23 +114,8 @@ PUTCHAR_AA(RASOPS_DEPTH)(void *cookie, i
 	if (__predict_false(width > MAX_WIDTH))
 		width = MAX_WIDTH;
 
-#if RASOPS_DEPTH != 24
-	clr[0] = (PIXEL_TYPE)ri->ri_devcmap[((uint32_t)attr >> 16) & 0xf];
-	clr[1] = (PIXEL_TYPE)ri->ri_devcmap[((uint32_t)attr >> 24) & 0xf];
-#endif
-
-	/*
-	 * This is independent to positions/lengths of RGB in pixel.
-	 */
-	off[0] = (((uint32_t)attr >> 16) & 0xf) * 3;
-	off[1] = (((uint32_t)attr >> 24) & 0xf) * 3;
-
-	r[0] = rasops_cmap[off[0]];
-	r[1] = rasops_cmap[off[1]];
-	g[0] = rasops_cmap[off[0] + 1];
-	g[1] = rasops_cmap[off[1] + 1];
-	b[0] = rasops_cmap[off[0] + 2];
-	b[1] = rasops_cmap[off[1] + 2];
+	clr[0] = (COLOR_TYPE)ri->ri_devcmap[((uint32_t)attr >> 16) & 0xf];
+	clr[1] = (COLOR_TYPE)ri->ri_devcmap[((uint32_t)attr >> 24) & 0xf];
 
 	if (uc == ' ') {
 		SET_BUF(0);
@@ -154,6 +130,19 @@ PUTCHAR_AA(RASOPS_DEPTH)(void *cookie, i
 	} else {
 		fr = FONT_GLYPH(uc, font, ri);
 
+		/*
+	 	 * This is independent to positions/lengths of RGB in pixel.
+	 	 */
+		off[0] = (((uint32_t)attr >> 16) & 0xf) * 3;
+		off[1] = (((uint32_t)attr >> 24) & 0xf) * 3;
+
+		r[0] = rasops_cmap[off[0]];
+		r[1] = rasops_cmap[off[1]];
+		g[0] = rasops_cmap[off[0] + 1];
+		g[1] = rasops_cmap[off[1] + 1];
+		b[0] = rasops_cmap[off[0] + 2];
+		b[1] = rasops_cmap[off[1] + 2];
+
 		for (y = 0; y < height; y++) {
 			for (x = 0; x < width; x++) {
 				aval = *fr;
@@ -179,9 +168,21 @@ PUTCHAR_AA(RASOPS_DEPTH)(void *cookie, i
 #endif
 
 #if RASOPS_DEPTH == 24
+#  if BYTE_ORDER == LITTLE_ENDIAN
+#define	ROFF	(ri->ri_rpos / 8)
+#define	GOFF	(ri->ri_gpos / 8)
+#define	BOFF	(ri->ri_bpos / 8)
+#  else	/* BIG_ENDIAN XXX not tested */
+#define	ROFF	(2 - ri->ri_rpos / 8)
+#define	GOFF	(2 - ri->ri_gpos / 8)
+#define	BOFF	(2 - ri->ri_bpos / 8)
+#  endif
 					buf[3 * x + ROFF] = R;
 					buf[3 * x + GOFF] = G;
 					buf[3 * x + BOFF] = B;
+#undef	ROFF
+#undef	GOFF
+#undef	BOFF
 #endif
 				}
 			}
@@ -212,11 +213,7 @@ PUTCHAR_AA(RASOPS_DEPTH)(void *cookie, i
 #undef	MAX_WIDTH
 
 #undef	PIXEL_TYPE
+#undef	COLOR_TYPE
 #undef	PIXEL_LEN
 #undef	SET_PIXEL
-
-#undef	ROFF
-#undef	GOFF
-#undef	BOFF
-
 #undef	SET_BUF

Reply via email to