World: r3wp
[rebcode] Rebcode discussion
older newer | first last |
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 | |
older newer | first last |