authorgravatar for 53971641+CrazyboyQCD@users.noreply.github.comCrazyboyQCD <53971641+CrazyboyQCD@users.noreply.github.com> 2024-09-14 08:22:19+08:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-09-13 17:22:19-07:00
log8ddce90e62e52244b7f6d1104bb39a55350f0a83
tree67330121ca56dd133898c4b9bef434541e5e8b15
parentb56a667ecdb9f34dbd60d247d4237bc008755979
signaturebadge-check Signed by PGP key B5690EEEBB952194

`std.ascii`: make `toLower` `toUpper` branchless (#21369)

Co-authored-by: WX\shixi <shixi1@cnwxsoft.com>

1 files changed, 4 insertions(+), 10 deletions(-)

lib/std/ascii.zig+4-10
......@@ -182,20 +182,14 @@ pub const isASCII = isAscii;
182182
183183/// Uppercases the character and returns it as-is if already uppercase or not a letter.
184184pub fn toUpper(c: u8) u8 {
185 if (isLower(c)) {
186 return c & 0b11011111;
187 } else {
188 return c;
189 }
185 const mask = @as(u8, @intFromBool(isLower(c))) << 5;
186 return c ^ mask;
190187}
191188
192189/// Lowercases the character and returns it as-is if already lowercase or not a letter.
193190pub fn toLower(c: u8) u8 {
194 if (isUpper(c)) {
195 return c | 0b00100000;
196 } else {
197 return c;
198 }
191 const mask = @as(u8, @intFromBool(isUpper(c))) << 5;
192 return c | mask;
199193}
200194
201195test "ASCII character classes" {