]> Git Repo - qemu.git/blobdiff - hw/cirrus_vga_rop.h
omap1: convert to memory API (part I)
[qemu.git] / hw / cirrus_vga_rop.h
index fbee6edeb167569d4b3b8ba2cd10c5e639e4c2cf..9c7bb092862cc5f9a49b9a3d22f82a0336af1387 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * QEMU Cirrus CLGD 54xx VGA Emulator.
- * 
+ *
  * Copyright (c) 2004 Fabrice Bellard
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * THE SOFTWARE.
  */
 
+static inline void glue(rop_8_,ROP_NAME)(uint8_t *dst, uint8_t src)
+{
+    *dst = ROP_FN(*dst, src);
+}
+
+static inline void glue(rop_16_,ROP_NAME)(uint16_t *dst, uint16_t src)
+{
+    *dst = ROP_FN(*dst, src);
+}
+
+static inline void glue(rop_32_,ROP_NAME)(uint32_t *dst, uint32_t src)
+{
+    *dst = ROP_FN(*dst, src);
+}
+
+#define ROP_OP(d, s) glue(rop_8_,ROP_NAME)(d, s)
+#define ROP_OP_16(d, s) glue(rop_16_,ROP_NAME)(d, s)
+#define ROP_OP_32(d, s) glue(rop_32_,ROP_NAME)(d, s)
+#undef ROP_FN
+
 static void
 glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s,
                              uint8_t *dst,const uint8_t *src,
@@ -31,9 +51,15 @@ glue(cirrus_bitblt_rop_fwd_, ROP_NAME)(CirrusVGAState *s,
     int x,y;
     dstpitch -= bltwidth;
     srcpitch -= bltwidth;
+
+    if (dstpitch < 0 || srcpitch < 0) {
+        /* is 0 valid? srcpitch == 0 could be useful */
+        return;
+    }
+
     for (y = 0; y < bltheight; y++) {
         for (x = 0; x < bltwidth; x++) {
-            ROP_OP(*dst, *src);
+            ROP_OP(dst, *src);
             dst++;
             src++;
         }
@@ -53,7 +79,7 @@ glue(cirrus_bitblt_rop_bkwd_, ROP_NAME)(CirrusVGAState *s,
     srcpitch += bltwidth;
     for (y = 0; y < bltheight; y++) {
         for (x = 0; x < bltwidth; x++) {
-            ROP_OP(*dst, *src);
+            ROP_OP(dst, *src);
             dst--;
             src--;
         }
@@ -75,8 +101,8 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_8)(CirrusVGAState *s,
     for (y = 0; y < bltheight; y++) {
         for (x = 0; x < bltwidth; x++) {
            p = *dst;
-            ROP_OP(p, *src);
-           if (p != s->gr[0x34]) *dst = p;
+            ROP_OP(&p, *src);
+           if (p != s->vga.gr[0x34]) *dst = p;
             dst++;
             src++;
         }
@@ -98,8 +124,8 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_8)(CirrusVGAState *s,
     for (y = 0; y < bltheight; y++) {
         for (x = 0; x < bltwidth; x++) {
            p = *dst;
-            ROP_OP(p, *src);
-           if (p != s->gr[0x34]) *dst = p;
+            ROP_OP(&p, *src);
+           if (p != s->vga.gr[0x34]) *dst = p;
             dst--;
             src--;
         }
@@ -122,9 +148,9 @@ glue(glue(cirrus_bitblt_rop_fwd_transp_, ROP_NAME),_16)(CirrusVGAState *s,
         for (x = 0; x < bltwidth; x+=2) {
            p1 = *dst;
            p2 = *(dst+1);
-            ROP_OP(p1, *src);
-            ROP_OP(p2, *(src+1));
-           if ((p1 != s->gr[0x34]) || (p2 != s->gr[0x35])) {
+            ROP_OP(&p1, *src);
+            ROP_OP(&p2, *(src + 1));
+           if ((p1 != s->vga.gr[0x34]) || (p2 != s->vga.gr[0x35])) {
                *dst = p1;
                *(dst+1) = p2;
            }
@@ -150,9 +176,9 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s,
         for (x = 0; x < bltwidth; x+=2) {
            p1 = *(dst-1);
            p2 = *dst;
-            ROP_OP(p1, *(src-1));
-            ROP_OP(p2, *src);
-           if ((p1 != s->gr[0x34]) || (p2 != s->gr[0x35])) {
+            ROP_OP(&p1, *(src - 1));
+            ROP_OP(&p2, *src);
+           if ((p1 != s->vga.gr[0x34]) || (p2 != s->vga.gr[0x35])) {
                *(dst-1) = p1;
                *dst = p2;
            }
@@ -178,3 +204,5 @@ glue(glue(cirrus_bitblt_rop_bkwd_transp_, ROP_NAME),_16)(CirrusVGAState *s,
 
 #undef ROP_NAME
 #undef ROP_OP
+#undef ROP_OP_16
+#undef ROP_OP_32
This page took 0.029304 seconds and 4 git commands to generate.