On 23/02/2019 01:30, J. Gareth Moreton wrote:
Given that the reference is an offset from %rbp, the compiler will know for sure that the variable is local, so there won't be any problems with multi-threading that prevents a lot of temporary register storage for safety reasons.

Unpacking records could be done if their address is not taken anywhere. The compiler already supports keeping records in registers under the same conditions, but only up to a certain size (two native registers) and only using the same layout as they would have in memory (so no explicit splitting out fields into separate registers).

On x86, it does this less often than on other architectures, because that architecture does not have efficient instructions to extract/insert bits from/into registers. However, one improvement that could be made there in the compiler is to ignore this fact if every field of the record already corresponds to exactly one register.


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to