// File: /workspace/github_c_makefile_star2_O2/ohkimur[P]the-c-programming-language-2nd-edition-solutions/chapter_2/exercise_2_01/types_ranges.c
// Function: main
int main(void)
{
  printf("#################### CHAR #####################\n");
  printf("bits: %d\n", CHAR_BIT);
  printf("unsigned char max: %d\n", UCHAR_MAX);
  printf("signed char min: %d\n", SCHAR_MIN);
  printf("signed char max: %d\n", SCHAR_MAX);
  printf("\n");

  printf("##################### INT #####################\n");
  printf("unsigned int max: %u\n", UINT_MAX);
  printf("signed int min: %d\n", INT_MIN);
  printf("signed int max: %d\n", INT_MAX);
  printf("\n");

  printf("################## SHORT INT ##################\n");
  printf("unsigned short int max: %u\n", USHRT_MAX);
  printf("signed short int min: %d\n", SHRT_MIN);
  printf("signed short int max: %d\n", SHRT_MAX);
  printf("\n");

  printf("################## LONG INT ###################\n");
  printf("unsigned long int max: %lu\n", ULONG_MAX);
  printf("signed long int min: %ld\n", LONG_MIN);
  printf("signed long int max: %ld\n", LONG_MAX);
  printf("\n");

  printf("################ LONG LONG INT #################\n");
  printf("unsigned long long int max: %llu\n", ULLONG_MAX);
  printf("signed long long int min: %lld\n", LLONG_MIN);
  printf("signed long long int max: %lld\n", LLONG_MAX);
  printf("\n");

  return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
leaq 0x100f(%rip), %rdi      # 0x217a
callq 0x1040
leaq 0xe8d(%rip), %rdi       # 0x2004
pushq $0x8
popq %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe86(%rip), %rdi       # 0x200e
movl $0xff, %esi
xorl %eax, %eax
callq 0x1050
leaq 0xe8a(%rip), %rdi       # 0x2025
pushq $-0x80
popq %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe64(%rip), %rdi       # 0x2010
pushq $0x7f
popq %rsi
xorl %eax, %eax
callq 0x1050
pushq $0xa
popq %rbx
movl %ebx, %edi
callq 0x1030
leaq 0xfe3(%rip), %rdi       # 0x21aa
callq 0x1040
leaq 0xe67(%rip), %rdi       # 0x203a
pushq $-0x1
popq %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe6c(%rip), %rdi       # 0x2050
movl $0x80000000, %esi       # imm = 0x80000000
xorl %eax, %eax
callq 0x1050
leaq 0xe6d(%rip), %rdi       # 0x2064
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
xorl %eax, %eax
callq 0x1050
movl %ebx, %edi
callq 0x1030
leaq 0xfc9(%rip), %rdi       # 0x21da
callq 0x1040
leaq 0xe5b(%rip), %rdi       # 0x2078
movl $0xffff, %esi           # imm = 0xFFFF
xorl %eax, %eax
callq 0x1050
leaq 0xe64(%rip), %rdi       # 0x2094
movl $0xffff8000, %esi       # imm = 0xFFFF8000
xorl %eax, %eax
callq 0x1050
leaq 0xe6b(%rip), %rdi       # 0x20ae
movl $0x7fff, %esi           # imm = 0x7FFF
xorl %eax, %eax
callq 0x1050
movl %ebx, %edi
callq 0x1030
leaq 0xfad(%rip), %rdi       # 0x220a
callq 0x1040
leaq 0xe5f(%rip), %rdi       # 0x20c8
pushq $-0x1
popq %r15
movq %r15, %rsi
xorl %eax, %eax
callq 0x1050
movabsq $0x7fffffffffffffff, %r14 # imm = 0x7FFFFFFFFFFFFFFF
leaq 0x1(%r14), %r12
leaq 0xe58(%rip), %rdi       # 0x20e4
movq %r12, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe61(%rip), %rdi       # 0x20fe
movq %r14, %rsi
xorl %eax, %eax
callq 0x1050
movl %ebx, %edi
callq 0x1030
leaq 0xf85(%rip), %rdi       # 0x223a
callq 0x1040
leaq 0xe57(%rip), %rdi       # 0x2118
movq %r15, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe68(%rip), %rdi       # 0x213a
movq %r12, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe77(%rip), %rdi       # 0x215a
movq %r14, %rsi
xorl %eax, %eax
callq 0x1050
movl %ebx, %edi
callq 0x1030
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq