fixes #1009
This commit is contained in:
parent
dc956c485a
commit
3365b42bbe
3 changed files with 45 additions and 2 deletions
|
|
@ -318,7 +318,7 @@ proc opConv*(dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): bool =
|
||||||
of tyFloat..tyFloat64:
|
of tyFloat..tyFloat64:
|
||||||
dest.intVal = system.toInt(src.floatVal)
|
dest.intVal = system.toInt(src.floatVal)
|
||||||
else:
|
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:
|
of tyFloat..tyFloat64:
|
||||||
if dest.kind != rkFloat:
|
if dest.kind != rkFloat:
|
||||||
myreset(dest); dest.kind = rkFloat
|
myreset(dest); dest.kind = rkFloat
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,14 @@ proc codeListing(c: PCtx, result: var string, start=0) =
|
||||||
let x = c.code[i]
|
let x = c.code[i]
|
||||||
|
|
||||||
let opc = opcode(x)
|
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,
|
result.addf("\t$#\tr$#, r$#, r$#", ($opc).substr(3), x.regA,
|
||||||
x.regB, x.regC)
|
x.regB, x.regC)
|
||||||
elif opc in relativeJumps:
|
elif opc in relativeJumps:
|
||||||
|
|
|
||||||
36
tests/vm/trgba.nim
Normal file
36
tests/vm/trgba.nim
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue