// File: /workspace/github_c_makefile_star2_O0/rchiossi[P]dexterity/lib/dex_stringid.c
// Function: dx_shift_stringid
void dx_shift_stringid(Dex* dx, uint32_t base, int32_t delta) {
  unsigned int i;

  dx_shift *shift, *prev;

  if (dx == NULL) return;

  shift = (dx_shift*) malloc_s(sizeof(dx_shift));

  shift->base = base;
  shift->delta = delta;
  shift->next = NULL;

  for (i=0; i<dx->header->type_ids_size; i++)
    dxsi_typeid(dx->type_ids[i],shift);
  
  for (i=0; i<dx->header->proto_ids_size; i++)
    dxsi_protoid(dx->proto_ids[i],shift);
  
  for (i=0; i<dx->header->field_ids_size; i++)
    dxsi_fieldid(dx->field_ids[i],shift);
  
  for (i=0; i<dx->header->method_ids_size; i++)
    dxsi_methodid(dx->method_ids[i],shift);
  
  for (i=0; i<dx->header->class_defs_size; i++)
    dxsi_classdef(dx->class_defs[i],shift);
  
  for (i=0; i<dx->meta.encoded_arrays_size; i++)
    dxsi_encodedarray(dx->encoded_arrays[i],shift);
  
  for (i=0; i<dx->meta.debug_info_list_size; i++)
    dxsi_debuginfo(dx->debug_info_list[i],shift);
  
  for (i=0; i<dx->meta.annotations_size; i++)
    dxsi_annotationitem(dx->annotations[i],shift);

  prev = shift;
  shift = shift->next;
  free(prev);

  //ULEB expansion  
  while (shift != NULL) {
    printf("delta2 = %d\n",shift->delta);
    dx->header->file_size += shift->delta;

    if (shift->base > dx->header->data_off)
      dx->header->data_size += shift->delta;

    dx_shift_offset(dx,shift->base,shift->delta);

    prev = shift;
    shift = shift->next;
    free(prev);
  }
  
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0xce7e
jmp 0xd128
movl $0x10, %edi
callq 0x4750
movq %rax, -0x20(%rbp)
movl -0xc(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl -0x10(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x8(%rax)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x48(%rcx), %eax
jae 0xcee4
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4160
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xceb2
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x50(%rcx), %eax
jae 0xcf1d
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4400
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xceeb
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x58(%rcx), %eax
jae 0xcf56
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4770
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xcf24
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x60(%rcx), %eax
jae 0xcf8f
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x40f0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xcf5d
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x68(%rcx), %eax
jae 0xcfc8
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x48e0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xcf96
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x108(%rcx), %rax
jae 0xd002
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x43a0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xcfcf
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x128(%rcx), %rax
jae 0xd03c
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4530
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xd009
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x158(%rcx), %rax
jae 0xd079
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rax
movl -0x14(%rbp), %ecx
movq (%rax,%rcx,8), %rdi
movq -0x20(%rbp), %rsi
callq 0x4740
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xd043
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4080
cmpq $0x0, -0x20(%rbp)
je 0xd128
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x1130(%rip), %rdi      # 0xe1df
movb $0x0, %al
callq 0x4290
movq -0x20(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movq (%rax), %rax
addl 0x28(%rax), %ecx
movl %ecx, 0x28(%rax)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x74(%rcx), %eax
jbe 0xd0f0
movq -0x20(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movq (%rax), %rax
addl 0x70(%rax), %ecx
movl %ecx, 0x70(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0x46a0
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4080
jmp 0xd096
addq $0x30, %rsp
popq %rbp
retq
nop