Consider the following code, which multiplies two vectors that contain single- p
ID: 3768610 • Letter: C
Question
Consider the following code, which multiplies two vectors that contain single- precision
complex values. Convert this code into VMIPS assembly code.
c_re[i] = a_re[i] * b_re[i] – a_im[i] * b_im[i] ;
c_im[i] = a_re[i] * b_im[i] + a_im[i] * b_re[i] ;
Assume the processor has a maximum vector length of 64, so you can solve this problem in one iteration without branch/loop instructions. You may use the vector registers from v1 to v8 to store the results and the array name represents the start address of each array. For example, you can load the array a_re to v1 by this instruction: lv $v1, a_re;
The vector instructions you may use to solve this problem ( Note: some vector instructions may not be used. ):
: load/store vector
: add vectors of single-precision
: add scalar to each element of vector of single-precision
: sub vectors of single-precision
: sub scalar to each element of vector of single-precision
: multiply vectors of single-precision
: multiply scalar to each element of vector of single-precision.
Explanation / Answer
000b C785FCF9 movl $0, -1540(%rbp) FFFF0000 0000 0015 E9AD0000 jmp .L2 00 .L3: 00c0 8385FCF9 addl $1, -1540(%rbp) FFFF01 001a 8B85FCF9 movl -1540(%rbp), %eax FFFF 0020 4898 cltq 0022 8B948500 movl -1536(%rbp,%rax,4), %edx FAFFFF 0029 8B85FCF9 movl -1540(%rbp), %eax FFFF 002f 4898 cltq 0031 8B848500 movl -1280(%rbp,%rax,4), %eax FBFFFF 0038 0FAFD0 imull %eax, %edx 003b 8B85FCF9 movl -1540(%rbp), %eax FFFF 0041 4898 cltq 0043 8B8C8500 movl -768(%rbp,%rax,4), %ecx FDFFFF 004a 8B85FCF9 movl -1540(%rbp), %eax FFFF 0050 4898 cltq 0052 8B848500 movl -512(%rbp,%rax,4), %eax FEFFFF 0059 0FAFC1 imull %ecx, %eax 005c 29C2 subl %eax, %edx 005e 8B85FCF9 movl -1540(%rbp), %eax FFFF 0064 4898 cltq 0066 89948500 movl %edx, -1024(%rbp,%rax,4) FCFFFF 006d 8B85FCF9 movl -1540(%rbp), %eax FFFF 0073 4898 cltq 0075 8B948500 movl -1536(%rbp,%rax,4), %edx FAFFFF 007c 8B85FCF9 movl -1540(%rbp), %eax FFFF 0082 4898 cltq 0084 8B848500 movl -512(%rbp,%rax,4), %eax FEFFFF 008b 0FAFD0 imull %eax, %edx 008e 8B85FCF9 movl -1540(%rbp), %eax FFFF 0094 4898 cltq 0096 8B8C8500 movl -768(%rbp,%rax,4), %ecx FDFFFF 009d 8B85FCF9 movl -1540(%rbp), %eax FFFF 00a3 4898 cltq 00a5 8B848500 movl -1280(%rbp,%rax,4), %eax FBFFFF 00ac 0FAFC1 imull %ecx, %eax 00af 01C2 addl %eax, %edx 00b1 8B85FCF9 movl -1540(%rbp), %eax FFFF 00b7 4898 cltq 00b9 89948500 movl %edx, -256(%rbp,%rax,4) FFFFFF .L2: 00c7 83BDFCF9 cmpl $63, -1540(%rbp) FFFF3F 00ce 0F8E46FF jle .L3 FFFF
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.