// File: /workspace/github_c_makefile_star2_O0/aquaxis[P]synverll/src/parser_ir_proc.c
// Function: create_verilog_call_args
int create_verilog_call_args(char *name, char *args, char *buf, int is_call)
{
	char *token;
	char *line;
	char *temp;
	char *type;
	int args_num = 0;
	char *str;
	int width;

	token = calloc(STR_MAX, 1);
	temp = calloc(STR_MAX, 1);
	type = calloc(STR_MAX, 1);
	line = charalloc(args);
	strcpy(buf, "");

	get_token_llvm(line, token);	// "("

	/* ToDo:
	 * Verilog HDLを作成しつつ、外部信号も生成すること
	 */
	while(strlen(line) > 0){
		// タイプ
		/*
		 * タイプが整数の場合は、Writeのみ
		 * タイプがポインタの場合はRead/Write有り
		 * タイプがメモリの場合はRead/Write有り
		 */
		get_irtype_llvm(line, token);
		if(!strcmp(token, "") || !strcmp(token,")")) break;
		strcpy(type, token);

		{
			do{
				get_token_llvm(line, token);
				if(!strcmp(token, "align")){
					get_token_llvm(line, token);
					get_token_llvm(line, token);
				}
			}while(
				!strcmp(token, "zeroext") ||
				!strcmp(token, "signext") ||
				!strcmp(token, "inreg") ||
				!strcmp(token, "byval") ||
				!strcmp(token, "sret") ||
				!strcmp(token, "align") ||
				!strcmp(token, "noalias") ||
				!strcmp(token, "nocapture") ||
				!strcmp(token, "nest") ||
				!strcmp(token, "readonly") ||
				!strcmp(token, "readnone") ||
				!strcmp(token, "returned") ||
				!strcmp(token, "dereferenceable") ||
				!strcmp(token, "dereferenceable_or_null")
			);
		}

		if(!strcmp(token, "getelementptr")){
			// ポインタの場合はアドレス値を算出するように復元
			sprintf(temp, "%s%s", token, line);
			free(line);
			line = calloc(strlen(temp)+1, 1);
			strcpy(line, temp);
			get_irtype_llvm(line, token);
		}

		create_adrs_getelementptr(token, token);
		str = regalloc(token);
		sprintf(temp, "\t\t\t__call_%s_args_%d <= %s;\n", name, args_num, str);
		free(str);
		strcat(buf, temp);

		// インターフェースの作成
		width = get_width(type);
		// call_sianal_treeへ登録
		if(!is_call) register_call_signal_tree(name, "args", args_num, width, 1);
		args_num++;

		// 次の","か")"まで読み飛ばし
		do{
			get_token_llvm(line, token);
		}while(strcmp(token, ",") && strcmp(token, ")"));
	}

	free(token);
	free(type);
	free(temp);
	free(line);

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl $0x0, -0x44(%rbp)
movl $0x400, %edi            # imm = 0x400
movl $0x1, %esi
callq 0x10c0
movq %rax, -0x28(%rbp)
movl $0x400, %edi            # imm = 0x400
movl $0x1, %esi
callq 0x10c0
movq %rax, -0x38(%rbp)
movl $0x400, %edi            # imm = 0x400
movl $0x1, %esi
callq 0x10c0
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0x13b0
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
leaq 0xa252(%rip), %rsi      # 0x14fc1
callq 0x1050
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11ca0
movq -0x30(%rbp), %rdi
callq 0x1070
cmpq $0x0, %rax
jbe 0xb113
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x25b0
movq -0x28(%rbp), %rdi
leaq 0xa215(%rip), %rsi      # 0x14fc1
callq 0x10d0
cmpl $0x0, %eax
je 0xadcb
movq -0x28(%rbp), %rdi
leaq 0x9358(%rip), %rsi      # 0x14119
callq 0x10d0
cmpl $0x0, %eax
jne 0xadd0
jmp 0xb113
movq -0x40(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x1050
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11ca0
movq -0x28(%rbp), %rdi
leaq 0x8a78(%rip), %rsi      # 0x1386d
callq 0x10d0
cmpl $0x0, %eax
jne 0xae19
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11ca0
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11ca0
jmp 0xae1b
movq -0x28(%rbp), %rdi
leaq 0x87f3(%rip), %rsi      # 0x13619
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8a2d(%rip), %rsi      # 0x13873
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8a15(%rip), %rsi      # 0x1387b
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x89fb(%rip), %rsi      # 0x13881
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x89e1(%rip), %rsi      # 0x13887
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x89a7(%rip), %rsi      # 0x1386d
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x89a6(%rip), %rsi      # 0x1388c
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x898e(%rip), %rsi      # 0x13894
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8978(%rip), %rsi      # 0x1389e
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x895d(%rip), %rsi      # 0x138a3
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x894a(%rip), %rsi      # 0x138ac
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8937(%rip), %rsi      # 0x138b5
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8924(%rip), %rsi      # 0x138be
callq 0x10d0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x55(%rbp)
je 0xafc6
movq -0x28(%rbp), %rdi
leaq 0x8918(%rip), %rsi      # 0x138ce
callq 0x10d0
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x55(%rbp)
movb -0x55(%rbp), %al
testb $0x1, %al
jne 0xaddd
movq -0x28(%rbp), %rdi
leaq 0x81e6(%rip), %rsi      # 0x131c2
callq 0x10d0
cmpl $0x0, %eax
jne 0xb041
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
leaq 0x82d8(%rip), %rsi      # 0x132d1
movb $0x0, %al
callq 0x1160
movq -0x30(%rbp), %rdi
callq 0x1030
movq -0x38(%rbp), %rdi
callq 0x1070
movq %rax, %rdi
addq $0x1, %rdi
movl $0x1, %esi
callq 0x10c0
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x1050
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x25b0
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0xb140
movq -0x28(%rbp), %rdi
callq 0xaa30
movq %rax, -0x50(%rbp)
movq -0x38(%rbp), %rdi
movq -0x8(%rbp), %rdx
movl -0x44(%rbp), %ecx
movq -0x50(%rbp), %r8
leaq 0x90cc(%rip), %rsi      # 0x1413d
movb $0x0, %al
callq 0x1160
movq -0x50(%rbp), %rdi
callq 0x1030
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x1150
movq -0x40(%rbp), %rdi
callq 0x12a0
movl %eax, -0x54(%rbp)
cmpl $0x0, -0x1c(%rbp)
jne 0xb0bc
movq -0x8(%rbp), %rdi
movl -0x44(%rbp), %edx
movl -0x54(%rbp), %ecx
leaq 0x90a9(%rip), %rsi      # 0x1415a
movl $0x1, %r8d
callq 0x72b0
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x11ca0
movq -0x28(%rbp), %rdi
leaq 0x99b8(%rip), %rsi      # 0x14a95
callq 0x10d0
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x56(%rbp)
je 0xb107
movq -0x28(%rbp), %rdi
leaq 0x9020(%rip), %rsi      # 0x14119
callq 0x10d0
cmpl $0x0, %eax
setne %al
movb %al, -0x56(%rbp)
movb -0x56(%rbp), %al
testb $0x1, %al
jne 0xb0c5
jmp 0xad81
movq -0x28(%rbp), %rdi
callq 0x1030
movq -0x40(%rbp), %rdi
callq 0x1030
movq -0x38(%rbp), %rdi
callq 0x1030
movq -0x30(%rbp), %rdi
callq 0x1030
xorl %eax, %eax
addq $0x60, %rsp
popq %rbp
retq
nop