r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[rebcode] Rebcode discussion

BrianH
23-Feb-2007
[2016]
It occurs to me that overflow on these inserts isn't handled the 
way you think.
Steeve
23-Feb-2007
[2017x2]
?
explain
BrianH
23-Feb-2007
[2019]
If you poke a value over 255 into a string/binary, the upper bytes 
may be ignored rather that triggering an overflow error. Test that.
Steeve
23-Feb-2007
[2020]
ok
BrianH
23-Feb-2007
[2021]
It might save on some AND x 255 statements.
Steeve
23-Feb-2007
[2022]
could be a usefull trick if it works
BrianH
23-Feb-2007
[2023]
It doesn't work in REBOL code, but it might in rebcode.
Steeve
23-Feb-2007
[2024x4]
you're right
the upper byte of 16bit value is not kept
hum
so i could remove some and var 255 from my code
BrianH
23-Feb-2007
[2028]
That provides a way to optimize the 16-bit load/store ops, particularly 
if there are 16-bit registers.
Steeve
23-Feb-2007
[2029]
hmm...
BrianH
23-Feb-2007
[2030]
You could invalidate the affected 16-bit register if you use an 8-bit 
op, or perhaps combine 2 8-bit load/stores that would add up to a 
16-bit load/store into their 16-bit operation.
Steeve
23-Feb-2007
[2031]
perhaps...
BrianH
23-Feb-2007
[2032x2]
This would be so much easier without self-modifying code - then we 
could just compile the code and be done with it.
BTW, don't forget the ROTL and ROTR opcodes. They may help with 16-bit 
combination registers.
Steeve
23-Feb-2007
[2034x5]
hum, i think that write/read the 16bits register into/from memory 
need more instructions if i follow you
because we perform 2 read/write ,even for 16bits registers, right 
?
currently to write _bc register in memory  , i write:
pokez mem adr _c 
add.i adr 1 
pokez mem adr _b
if _bc is handle as a 16 bit value, i need to do:
pokez mem adr _bc
add.i adr 1
rotr _bc 8
pokez mem adr _bc
rotl _bc 8
right ?
BrianH
23-Feb-2007
[2039x2]
I don't know, I haven't found the stores in your code yet.
Is the Z80 a strict load/store architecture, or do they have other 
operations that can reference memory?
Steeve
23-Feb-2007
[2041]
i don't understand what u mean, Z80 is not concerned, that is how 
we perfom updates in memory with rebcode
BrianH
23-Feb-2007
[2042]
I am asking if operations like ADD can add values directly to/from 
memory like it can on x86, or does it have to load first and store 
after?
Steeve
23-Feb-2007
[2043x2]
no, only registers can read/wites memory
Z80 can only perform operations on registers
BrianH
23-Feb-2007
[2045]
OK, strict load/store.
Steeve
23-Feb-2007
[2046x3]
anyway that is not the problem, i just said, that handling 16bits 
registers in 16 bits values instead to have 2 register of 8 bits 
is much slower when we have to read/write into memory
plus lost of time due to the syncronization between 16 and 8 bits 
registers
finally i'm not sure that it's a good idea to separate them
BrianH
23-Feb-2007
[2049]
Well, I would have to read more of that document to agree with you 
or not :(
Steeve
23-Feb-2007
[2050x4]
but we would have a gain when performing operations between 16 bits 
registers
quite balanced
in C it will not be a problem, 8 bits registers and 16 bits registers 
will share the same space adressing.
it's missing in rebol
BrianH
23-Feb-2007
[2054]
Do you mean union types?
Steeve
23-Feb-2007
[2055x3]
yesp, that's what i mean
that will be the solution
definitivly
BrianH
23-Feb-2007
[2058]
Ah, according to the docs, Z80 is not strictly load/store.
Steeve
23-Feb-2007
[2059]
but the instructions which operate directly in memory are rarely 
used, because they consume more time.
BrianH
23-Feb-2007
[2060]
More time than the combination of a load to a register and an add 
from that register?
Steeve
23-Feb-2007
[2061x2]
yes
depending what operations follows , but right the most time
BrianH
23-Feb-2007
[2063]
Wow. It's the same amount of work, in fewer instructions, and it 
takes more time. How does that happen? Microcode?
Steeve
23-Feb-2007
[2064x2]
the reason is that most register operations use one opcode ob one 
byte length
*of one byte length