xref: /aosp_15_r20/external/musl/tools/add-cfi.common.awk (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Workerfunction hex2int(str,   i) {
2*c9945492SAndroid Build Coastguard Worker  str = tolower(str)
3*c9945492SAndroid Build Coastguard Worker
4*c9945492SAndroid Build Coastguard Worker  for (i = 1; i <= 16; i++) {
5*c9945492SAndroid Build Coastguard Worker    char = substr("0123456789abcdef", i, 1)
6*c9945492SAndroid Build Coastguard Worker    lookup[char] = i-1
7*c9945492SAndroid Build Coastguard Worker  }
8*c9945492SAndroid Build Coastguard Worker
9*c9945492SAndroid Build Coastguard Worker  result = 0
10*c9945492SAndroid Build Coastguard Worker  for (i = 1; i <= length(str); i++) {
11*c9945492SAndroid Build Coastguard Worker    result = result * 16
12*c9945492SAndroid Build Coastguard Worker    char   = substr(str, i, 1)
13*c9945492SAndroid Build Coastguard Worker    result = result + lookup[char]
14*c9945492SAndroid Build Coastguard Worker  }
15*c9945492SAndroid Build Coastguard Worker  return result
16*c9945492SAndroid Build Coastguard Worker}
17*c9945492SAndroid Build Coastguard Worker
18*c9945492SAndroid Build Coastguard Workerfunction parse_const(str) {
19*c9945492SAndroid Build Coastguard Worker  sign = sub(/^-/, "", str)
20*c9945492SAndroid Build Coastguard Worker  hex  = sub(/^0x/, "", str)
21*c9945492SAndroid Build Coastguard Worker  if (hex)
22*c9945492SAndroid Build Coastguard Worker    n = hex2int(str)
23*c9945492SAndroid Build Coastguard Worker  else
24*c9945492SAndroid Build Coastguard Worker    n = str+0
25*c9945492SAndroid Build Coastguard Worker  return sign ? -n : n
26*c9945492SAndroid Build Coastguard Worker}
27