Improve runtime.printuint32: avoid recursion

This reduces size slightly at least on the PCA10040, and is probably
faster and probably uses less stack as well.
Этот коммит содержится в:
Ayke van Laethem 2018-08-31 21:20:39 +02:00
родитель f057d612fc
коммит 3cdf606183
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED

Просмотреть файл

@ -43,13 +43,21 @@ func printint16(n uint16) {
} }
func printuint32(n uint32) { func printuint32(n uint32) {
// TODO: don't recurse, but still be compact (and don't divide/mod digits := [10]byte{} // enough to hold (2^32)-1
// more than necessary). // Fill in all 10 digits.
prevdigits := n / 10 firstdigit := 9 // digit index that isn't zero (by default, the last to handle '0' correctly)
if prevdigits != 0 { for i := 9; i >= 0; i-- {
printuint32(prevdigits) digit := byte(n%10 + '0')
digits[i] = digit
if digit != '0' {
firstdigit = i
}
n /= 10
}
// Print digits without the leading zeroes.
for i := firstdigit; i < 10; i++ {
putchar(digits[i])
} }
putchar(byte((n % 10) + '0'))
} }
func printint32(n int32) { func printint32(n int32) {