aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/pr83358-1.c
blob: 96427b2f56dd169eaa9e1d43e6d773b535f3b4d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* { dg-do compile } */
/* { dg-options "-O2 -mtune=core2" } */

#include <stdint.h>

void bin2ascii(uint64_t val, char *dst) {
  const int64_t POW10_10 = ((int64_t)10) * 1000 * 1000 * 1000;
  int64_t hix = val / POW10_10;
  int64_t lox = val % POW10_10;
  int32_t v0 = hix / 100000;
  int32_t v1 = hix % 100000;
  int32_t v2 = lox / 100000;
  int32_t v3 = lox % 100000;
  for (int i = 4; i != 0; --i) {
    dst[i + 0 * 5] = v0 % 10 + '0';
    v0 /= 10;
    dst[i + 1 * 5] = v1 % 10 + '0';
    v1 /= 10;
    dst[i + 2 * 5] = v2 % 10 + '0';
    v2 /= 10;
    dst[i + 3 * 5] = v3 % 10 + '0';
    v3 /= 10;
  }
  dst[0 * 5] = v0 + '0';
  dst[1 * 5] = v1 + '0';
  dst[2 * 5] = v2 + '0';
  dst[3 * 5] = v3 + '0';
  dst[4 * 5] = 0;
}

/* { dg-final { scan-assembler-not "idiv" } } */