mirror of
				https://github.com/irmen/prog8.git
				synced 2025-10-31 00:16:08 +00:00 
			
		
		
		
	warning in doc about problems when using long + R0/R1 together
This commit is contained in:
		| @@ -1,9 +1,6 @@ | |||||||
| TODO | TODO | ||||||
| ==== | ==== | ||||||
|  |  | ||||||
| - optimized translation for pokeX and peekX if address =  pointer + uwordoffset. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| STRUCTS and TYPED POINTERS | STRUCTS and TYPED POINTERS | ||||||
| -------------------------- | -------------------------- | ||||||
|  |  | ||||||
| @@ -22,6 +19,7 @@ STRUCTS and TYPED POINTERS | |||||||
| Future Things and Ideas | Future Things and Ideas | ||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^ | ||||||
|  |  | ||||||
|  | - can the compiler give a warning if you use R0/R1 in expressions and/or statements together with long integers? (because R0/R1 are likely to be clobbered as temporary storage) | ||||||
| - handle Alias in a general way in LiteralsToAutoVarsAndRecombineIdentifiers instead of replacing it scattered over multiple functions | - handle Alias in a general way in LiteralsToAutoVarsAndRecombineIdentifiers instead of replacing it scattered over multiple functions | ||||||
| - After long variable type is completed: make all constants long by default (remove type name altogether), reduce to target type implictly if the actual value fits. | - After long variable type is completed: make all constants long by default (remove type name altogether), reduce to target type implictly if the actual value fits. | ||||||
|   This will break some existing programs that depend on value wrap arounds, but gives more intuitive constant number handling. |   This will break some existing programs that depend on value wrap arounds, but gives more intuitive constant number handling. | ||||||
| @@ -172,7 +170,6 @@ Optimizations | |||||||
| ------------- | ------------- | ||||||
|  |  | ||||||
| - optimize inplaceLongShiftRight() for byte aligned cases | - optimize inplaceLongShiftRight() for byte aligned cases | ||||||
| - investigate why the c bench Sieve test is slower in prog8 than all of the rest |  | ||||||
| - more optimized operator handling of different types, for example uword a ^ byte b now does a type cast of b to word first | - more optimized operator handling of different types, for example uword a ^ byte b now does a type cast of b to word first | ||||||
| - optimize longEqualsValue() for const and variable operands to not assign needlessly to R0-R3. | - optimize longEqualsValue() for const and variable operands to not assign needlessly to R0-R3. | ||||||
| - optimize optimizedBitwiseExpr()  for const and variable operands to not assign needlessly to R0-R3. | - optimize optimizedBitwiseExpr()  for const and variable operands to not assign needlessly to R0-R3. | ||||||
|   | |||||||
| @@ -248,8 +248,13 @@ to be done on word values, and don't want to explicitly have to cast everything | |||||||
|     long value as an unsigned 32 bits value just fine. |     long value as an unsigned 32 bits value just fine. | ||||||
|     Operations on long integers take a lot of instructions on 8 bit cpu's so code that uses them |     Operations on long integers take a lot of instructions on 8 bit cpu's so code that uses them | ||||||
|     a lot will be much slower than when you restrict yourself to 8 or 16 bit values. Use long values sparingly. |     a lot will be much slower than when you restrict yourself to 8 or 16 bit values. Use long values sparingly. | ||||||
|     **Several operations on long values require the use of the R0 and R1 virtual register as temporary storage** |  | ||||||
|  | .. danger:: | ||||||
|  |     **longs and R0/R1**: | ||||||
|  |     **Many operations on long values require the use of the R0 and R1 virtual register as temporary storage** | ||||||
|     so if you are working with long values, you should assume that the contents of R0 and R1 are destroyed. |     so if you are working with long values, you should assume that the contents of R0 and R1 are destroyed. | ||||||
|  |     **Using R0 or R1 in expressions that work with longs, will probably give a corrupted result, without | ||||||
|  |     a warning of the compiler!** It is strongly advised to *not* use R0/R1 at all when dealing with longs. | ||||||
|  |  | ||||||
|  |  | ||||||
| Booleans | Booleans | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user