--- /dev/null
+Status: applied
+
+Index: b/glide3x/h3/glide3/src/gaa.c
+===================================================================
+--- a/glide3x/h3/glide3/src/gaa.c
++++ b/glide3x/h3/glide3/src/gaa.c
+@@ -616,7 +616,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count,
+ e = pointers;
+ if (mode)
+ e = *(float **)e;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ ptX = FARRAY(e, gc->state.vData.vertexInfo.offset);
+ ptY = FARRAY(e, gc->state.vData.vertexInfo.offset+4);
+@@ -717,7 +717,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count,
+ if (mode)
+ e = *(float **)e;
+ oow = 1.0f / FARRAY(e, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ ptX = FARRAY(e, gc->state.vData.vertexInfo.offset)
+ *oow*gc->state.Viewport.hwidth+gc->state.Viewport.ox;
+@@ -842,9 +842,9 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ /* draw from low Y to high Y */
+ if (FARRAY(v2, gc->state.vData.vertexInfo.offset+4) < FARRAY(v1, gc->state.vData.vertexInfo.offset+4)) {
+@@ -1023,9 +1023,9 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owa = oowa = 1.0f / FARRAY(v1, gc->state.vData.wInfo.offset);
+ owb = oowb = 1.0f / FARRAY(v2, gc->state.vData.wInfo.offset);
+ }
+@@ -1037,7 +1037,7 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owb = oowb = 1.0f / FARRAY(v2, gc->state.vData.wInfo.offset);
+ }
+
+@@ -1373,7 +1373,7 @@ _grAADrawTriangles(FxI32 mode, FxI32 tty
+ b = *(float **)b;
+ c = *(float **)c;
+ }
+- (float *)pointers += stride*3;
++ pointers = (float *)pointers + stride*3;
+
+ /* move culling test to here */
+ {
+@@ -1549,7 +1549,7 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 t
+ b = *(float **)b;
+ c = *(float **)c;
+ }
+- (float *)pointers += stride*3;
++ pointers = (float *)pointers + stride*3;
+ oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset);
+ oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+ oowc = 1.0f / FARRAY(c, gc->state.vData.wInfo.offset);
+@@ -1716,7 +1716,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mo
+ if (type == kSetupFan) {
+ v[0] = (mode == 0) ? pointers : *(float **)pointers;
+ while (sCount--) {
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (mode) {
+ v[1] = *(float **)pointers;
+ v[2] = *((float **)pointers+1);
+@@ -1758,7 +1758,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mo
+ _grAADrawTriangles(1, type, 3, v);
+ else
+ _grAAVpDrawTriangles(1, type, 3, v);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ flip = ~flip;
+ }
+ flip = ~flip;
+Index: b/glide3x/h3/glide3/src/gdraw.c
+===================================================================
+--- a/glide3x/h3/glide3/src/gdraw.c
++++ b/glide3x/h3/glide3/src/gdraw.c
+@@ -402,7 +402,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, v
+ vPtr = pointers;
+ if (mode) vPtr = *(float **)vPtr;
+
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n",
+ FARRAY(vPtr,gc->state.vData.vertexInfo.offset),
+@@ -491,7 +491,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, v
+ if (mode)
+ vPtr = *(float **)vPtr;
+ oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ {
+ FxU32 x, y;
+@@ -616,9 +616,9 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ /*
+ ** compute absolute deltas and draw from low Y to high Y
+@@ -778,10 +778,10 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset);
+ owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ }
+ else {
+ owa = oowa = oowb;
+@@ -791,7 +791,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+ }
+ fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4)
+@@ -944,7 +944,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI
+ vPtr = pointers;
+ if (mode)
+ vPtr = *(float **)vPtr;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ i = gc->tsuDataList[dataElem];
+
+@@ -984,7 +984,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI
+ *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox);
+ TRI_SETF(FARRAY(vPtr, 4)
+ *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_VP_SETFS(vPtr,oow);
+ }
+Index: b/glide3x/h3/glide3/src/gstrip.c
+===================================================================
+--- a/glide3x/h3/glide3/src/gstrip.c
++++ b/glide3x/h3/glide3/src/gstrip.c
+@@ -190,7 +190,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 ty
+ vPtr = pointers;
+ if (mode)
+ vPtr = *(float **)vPtr;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_SETF(FARRAY(vPtr, 0));
+ dataElem = 0;
+@@ -230,7 +230,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 ty
+ *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox);
+ TRI_SETF(FARRAY(vPtr, 4)
+ *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_VP_SETFS(vPtr, oow);
+ }
+Index: b/glide3x/h3/glide3/src/distrip.c
+===================================================================
+--- a/glide3x/h3/glide3/src/distrip.c
++++ b/glide3x/h3/glide3/src/distrip.c
+@@ -450,7 +450,7 @@ GR_DIENTRY(grDrawVertexArray, void , (Fx
+ else {
+ while ((int)Count >= 3) {
+ grDrawTriangle(*(float **)pointers, *((float **)pointers+1), *((float **)pointers+2));
+- (float *)pointers += 3;
++ pointers = (float *)pointers + 3;
+ Count -= 3;
+ }
+ }
+Index: b/glide3x/h5/glide3/src/gaa.c
+===================================================================
+--- a/glide3x/h5/glide3/src/gaa.c
++++ b/glide3x/h5/glide3/src/gaa.c
+@@ -628,7 +628,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count,
+ e = pointers;
+ if (mode)
+ e = *(float **)e;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ ptX = FARRAY(e, gc->state.vData.vertexInfo.offset);
+ ptY = FARRAY(e, gc->state.vData.vertexInfo.offset+4);
+@@ -729,7 +729,7 @@ _grAADrawPoints(FxI32 mode, FxI32 count,
+ if (mode)
+ e = *(float **)e;
+ oow = 1.0f / FARRAY(e, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ ptX = FARRAY(e, gc->state.vData.vertexInfo.offset)
+ *oow*gc->state.Viewport.hwidth+gc->state.Viewport.ox;
+@@ -856,9 +856,9 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ /* draw from low Y to high Y */
+ if (FARRAY(v2, gc->state.vData.vertexInfo.offset+4) < FARRAY(v1, gc->state.vData.vertexInfo.offset+4)) {
+@@ -1037,9 +1037,9 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owa = oowa = 1.0f / FARRAY(v1, gc->state.vData.wInfo.offset);
+ owb = oowb = 1.0f / FARRAY(v2, gc->state.vData.wInfo.offset);
+ }
+@@ -1051,7 +1051,7 @@ _grAADrawLineStrip(FxI32 mode, FxI32 lty
+ v1 = *(float **)v1;
+ v2 = *(float **)v2;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owb = oowb = 1.0f / FARRAY(v2, gc->state.vData.wInfo.offset);
+ }
+
+@@ -1391,7 +1391,7 @@ _grAADrawTriangles(FxI32 mode, FxI32 tty
+ b = *(float **)b;
+ c = *(float **)c;
+ }
+- (float *)pointers += stride*3;
++ pointers = (float *)pointers + stride*3;
+
+ /* move culling test to here */
+ {
+@@ -1567,7 +1567,7 @@ _grAAVpDrawTriangles(FxI32 mode, FxI32 t
+ b = *(float **)b;
+ c = *(float **)c;
+ }
+- (float *)pointers += stride*3;
++ pointers = (float *)pointers + stride*3;
+ oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset);
+ oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+ oowc = 1.0f / FARRAY(c, gc->state.vData.wInfo.offset);
+@@ -1734,7 +1734,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mo
+ if (type == kSetupFan) {
+ v[0] = (mode == 0) ? pointers : *(float **)pointers;
+ while (sCount--) {
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (mode) {
+ v[1] = *(float **)pointers;
+ v[2] = *((float **)pointers+1);
+@@ -1776,7 +1776,7 @@ _grAADrawVertexList(FxU32 type, FxI32 mo
+ _grAADrawTriangles(1, type, 3, v);
+ else
+ _grAAVpDrawTriangles(1, type, 3, v);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ flip = ~flip;
+ }
+ flip = ~flip;
+Index: b/glide3x/h5/glide3/src/gdraw.c
+===================================================================
+--- a/glide3x/h5/glide3/src/gdraw.c
++++ b/glide3x/h5/glide3/src/gdraw.c
+@@ -472,7 +472,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, v
+ vPtr = pointers;
+ if (mode) vPtr = *(float **)vPtr;
+
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n",
+ FARRAY(vPtr,gc->state.vData.vertexInfo.offset),
+@@ -554,7 +554,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, v
+ vPtr = pointers;
+ if (mode) vPtr = *(float **)vPtr;
+
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ GDBG_INFO_MORE(gc->myLevel, "(%f %f)\n",
+ FARRAY(vPtr,gc->state.vData.vertexInfo.offset),
+@@ -665,7 +665,7 @@ _grDrawPoints(FxI32 mode, FxI32 count, v
+ if (mode)
+ vPtr = *(float **)vPtr;
+ oow = 1.0f / FARRAY(vPtr, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ {
+ float fx, fy;
+@@ -802,9 +802,9 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ if (ltype == GR_LINES)
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ /*
+ ** compute absolute deltas and draw from low Y to high Y
+@@ -964,10 +964,10 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owa = oowa = 1.0f / FARRAY(a, gc->state.vData.wInfo.offset);
+ owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ }
+ else {
+ owa = oowa = oowb;
+@@ -977,7 +977,7 @@ _grDrawLineStrip(FxI32 mode, FxI32 ltype
+ a = *(float **)a;
+ b = *(float **)b;
+ }
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+ owb = oowb = 1.0f / FARRAY(b, gc->state.vData.wInfo.offset);
+ }
+ fay = tmp1 = FARRAY(a, gc->state.vData.vertexInfo.offset+4)
+@@ -1125,7 +1125,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI
+ vPtr = pointers;
+ if (mode)
+ vPtr = *(float **)vPtr;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ i = gc->tsuDataList[dataElem];
+
+@@ -1165,7 +1165,7 @@ _grDrawTriangles_Default(FxI32 mode, FxI
+ *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox);
+ TRI_SETF(FARRAY(vPtr, 4)
+ *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_VP_SETFS(vPtr,oow);
+ }
+Index: b/glide3x/h5/glide3/src/gstrip.c
+===================================================================
+--- a/glide3x/h5/glide3/src/gstrip.c
++++ b/glide3x/h5/glide3/src/gstrip.c
+@@ -214,7 +214,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 ty
+ vPtr = pointers;
+ if (mode)
+ vPtr = *(float **)vPtr;
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_SETF(FARRAY(vPtr, 0));
+ dataElem = 0;
+@@ -254,7 +254,7 @@ _grDrawVertexList(FxU32 pktype, FxU32 ty
+ *oow*gc->state.Viewport.hwidth + gc->state.Viewport.ox);
+ TRI_SETF(FARRAY(vPtr, 4)
+ *oow*gc->state.Viewport.hheight + gc->state.Viewport.oy);
+- (float *)pointers += stride;
++ pointers = (float *)pointers + stride;
+
+ TRI_VP_SETFS(vPtr, oow);
+ }
+Index: b/glide3x/h5/glide3/src/distrip.c
+===================================================================
+--- a/glide3x/h5/glide3/src/distrip.c
++++ b/glide3x/h5/glide3/src/distrip.c
+@@ -458,7 +458,7 @@ GR_DIENTRY(grDrawVertexArray, void , (Fx
+ else {
+ while ((int)Count >= 3) {
+ grDrawTriangle(*(float **)pointers, *((float **)pointers+1), *((float **)pointers+2));
+- (float *)pointers += 3;
++ pointers = (float *)pointers + 3;
+ Count -= 3;
+ }
+ }
+Index: b/glide3x/h5/glide3/src/glfb.c
+===================================================================
+--- a/glide3x/h5/glide3/src/glfb.c
++++ b/glide3x/h5/glide3/src/glfb.c
+@@ -1333,8 +1333,10 @@ GR_ENTRY(grLfbReadRegion, FxBool, (GrBuf
+ while(src_height--)
+ {
+ /* adjust starting alignment */
+- if (((FxU32)src)&3)
+- *((FxU16 *)dst)++=*((FxU16 *)src)++;
++ if (((FxU32)src)&3) {
++ *((FxU16 *)dst)=*((FxU16 *)src);
++ dst = ((FxU16 *)dst)+1; src = ((FxU16 *)src);
++ }
+
+ /* read in dwords of pixels */
+ if(length)
+@@ -1353,8 +1355,8 @@ GR_ENTRY(grLfbReadRegion, FxBool, (GrBuf
+ *((FxU16 *)(((AnyPtr)dst) + byte_index))=*((FxU16 *)(((AnyPtr)src) + byte_index));
+ }
+ /* adjust for next line */
+- ((FxU8 *)src)+=src_adjust;
+- ((FxU8 *)dst)+=dst_adjust;
++ src=((FxU8 *)src)+src_adjust;
++ dst=((FxU8 *)dst)+dst_adjust;
+ }
+ rv=FXTRUE;
+ /* unlock buffer */