This commit is contained in:
Araq
2014-03-27 19:20:59 +01:00
parent dc956c485a
commit 3365b42bbe
3 changed files with 45 additions and 2 deletions

View File

@@ -318,7 +318,7 @@ proc opConv*(dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): bool =
of tyFloat..tyFloat64:
dest.intVal = system.toInt(src.floatVal)
else:
dest.intVal = src.intVal and ((1 shl desttyp.size)-1)
dest.intVal = src.intVal and ((1 shl (desttyp.size*8))-1)
of tyFloat..tyFloat64:
if dest.kind != rkFloat:
myreset(dest); dest.kind = rkFloat

View File

@@ -41,7 +41,14 @@ proc codeListing(c: PCtx, result: var string, start=0) =
let x = c.code[i]
let opc = opcode(x)
if opc < firstABxInstr:
if opc in {opcConv, opcCast}:
let y = c.code[i+1]
let z = c.code[i+2]
result.addf("\t$#\tr$#, r$#, $#, $#", ($opc).substr(3), x.regA, x.regB,
c.types[y.regBx-wordExcess].typeToString,
c.types[z.regBx-wordExcess].typeToString)
inc i, 2
elif opc < firstABxInstr:
result.addf("\t$#\tr$#, r$#, r$#", ($opc).substr(3), x.regA,
x.regB, x.regC)
elif opc in relativeJumps:

36
tests/vm/trgba.nim Normal file
View File

@@ -0,0 +1,36 @@
discard """
output: '''[127, 127, 0, 255]
[127, 127, 0, 255]
'''
"""
#bug #1009
type
TAggRgba8* = array[4, byte]
template R*(self: TAggRgba8): Byte = self[0]
template G*(self: TAggRgba8): Byte = self[1]
template B*(self: TAggRgba8): Byte = self[2]
template A*(self: TAggRgba8): Byte = self[3]
template `R=`*(self: TAggRgba8, val: Byte) =
self[0] = val
template `G=`*(self: TAggRgba8, val: Byte) =
self[1] = val
template `B=`*(self: TAggRgba8, val: Byte) =
self[2] = val
template `A=`*(self: TAggRgba8, val: Byte) =
self[3] = val
proc ABGR* (val: int| int64): TAggRgba8 =
var V = val
result.R = V and 0xFF
V = V shr 8
result.G = V and 0xFF
V = V shr 8
result.B = V and 0xFF
result.A = (V shr 8) and 0xFF
const
c1 = ABGR(0xFF007F7F)
echo ABGR(0xFF007F7F).repr, c1.repr