On Tue, Oct 19, 2021 at 03:39:11PM +0100, Mark Rutland wrote:
On Tue, Oct 19, 2021 at 11:14:47AM +0100, Will Deacon wrote:
sve_flush_live(true, vq_minus_one);
What does the pcs say about passing bools in registers? Can we guarantee that false is a 64-bit zero?
Per usual rules, bits [63:8] can be arbitrary -- AAPCS64 leaves it to the callee to extend values, with the upper bits being arbitrary, and it maps _Bool/bool to unsigned char, which covers bits [7:0].
So a bool false in a register is not guaranteed to be a 64-bit zero. But since it *is* guarnateed to be either 0 or 1, we can use TBZ/TBNZ instead of CBZ/CBNZ. Either that, or extend it to a wider type in the function prototype.
I'll change it to tbz - if we use a wider type then people will notice using true/false with it in the code.