// File: /workspace/github_c_makefile_star2_O1/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 %r14
pushq %rbx
pushq %rax
leaq 0x1013(%rip), %rdi      # 0x217a
callq 0x1040
leaq 0xe91(%rip), %rdi       # 0x2004
movl $0x8, %esi
xorl %eax, %eax
callq 0x1050
leaq 0xe88(%rip), %rdi       # 0x200e
movl $0xff, %esi
xorl %eax, %eax
callq 0x1050
leaq 0xe8c(%rip), %rdi       # 0x2025
movl $0xffffff80, %esi       # imm = 0xFFFFFF80
xorl %eax, %eax
callq 0x1050
leaq 0xe64(%rip), %rdi       # 0x2010
movl $0x7f, %esi
xorl %eax, %eax
callq 0x1050
movl $0xa, %edi
callq 0x1030
leaq 0xfe1(%rip), %rdi       # 0x21aa
callq 0x1040
leaq 0xe65(%rip), %rdi       # 0x203a
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
xorl %eax, %eax
callq 0x1050
leaq 0xe68(%rip), %rdi       # 0x2050
movl $0x80000000, %esi       # imm = 0x80000000
xorl %eax, %eax
callq 0x1050
leaq 0xe69(%rip), %rdi       # 0x2064
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
xorl %eax, %eax
callq 0x1050
movl $0xa, %edi
callq 0x1030
leaq 0xfc2(%rip), %rdi       # 0x21da
callq 0x1040
leaq 0xe54(%rip), %rdi       # 0x2078
movl $0xffff, %esi           # imm = 0xFFFF
xorl %eax, %eax
callq 0x1050
leaq 0xe5d(%rip), %rdi       # 0x2094
movl $0xffff8000, %esi       # imm = 0xFFFF8000
xorl %eax, %eax
callq 0x1050
leaq 0xe64(%rip), %rdi       # 0x20ae
movl $0x7fff, %esi           # imm = 0x7FFF
xorl %eax, %eax
callq 0x1050
movl $0xa, %edi
callq 0x1030
leaq 0xfa3(%rip), %rdi       # 0x220a
callq 0x1040
leaq 0xe55(%rip), %rdi       # 0x20c8
movq $-0x1, %rsi
xorl %eax, %eax
callq 0x1050
movabsq $0x7fffffffffffffff, %rbx # imm = 0x7FFFFFFFFFFFFFFF
leaq 0x1(%rbx), %r14
leaq 0xe4e(%rip), %rdi       # 0x20e4
movq %r14, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe57(%rip), %rdi       # 0x20fe
movq %rbx, %rsi
xorl %eax, %eax
callq 0x1050
movl $0xa, %edi
callq 0x1030
leaq 0xf78(%rip), %rdi       # 0x223a
callq 0x1040
leaq 0xe4a(%rip), %rdi       # 0x2118
movq $-0x1, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe57(%rip), %rdi       # 0x213a
movq %r14, %rsi
xorl %eax, %eax
callq 0x1050
leaq 0xe66(%rip), %rdi       # 0x215a
movq %rbx, %rsi
xorl %eax, %eax
callq 0x1050
movl $0xa, %edi
callq 0x1030
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq