# extern __builtin_varargs_start: int -> void # extern __builtin_va_start: int -> int -> void # extern __builtin_va_end: int -> void # extern __builtin_va_copy: int -> int -> void # extern __builtin_va_arg: int -> int -> void # extern __builtin_types_compatible_p: int -> int -> int # extern __builtin_tanl: float -> float # extern __builtin_tanhl: float -> float # extern __builtin_tanhf: float -> float # extern __builtin_tanh: float -> float # extern __builtin_tanf: float -> float # extern __builtin_tan: float -> float # extern __builtin_strspn: int -> int -> int # extern __builtin_strpbrk: int -> int -> int # extern __builtin_strncpy: int -> int -> int -> int # extern __builtin_strncmp: int -> int -> int -> int # extern __builtin_strncat: int -> int -> int -> int # extern __builtin_strcspn: int -> int -> int # extern __builtin_strcpy: int -> int -> int # extern __builtin_strcmp: int -> int -> int # extern __builtin_strchr: int -> int -> int # extern __builtin_stpcpy: int -> int -> int # extern __builtin_stdarg_start: int -> void # extern __builtin_sqrtl: float -> float # extern __builtin_sqrtf: float -> float # extern __builtin_sqrt: float -> float # extern __builtin_sinl: float -> float # extern __builtin_sinhl: float -> float # extern __builtin_sinhf: float -> float # extern __builtin_sinh: float -> float # extern __builtin_sinf: float -> float # extern __builtin_sin: float -> float # extern __builtin_return_address: int -> int # extern __builtin_return: int -> void # extern __builtin_powil: float -> int -> float # extern __builtin_powif: float -> int -> float # extern __builtin_powi: float -> int -> float # extern __builtin_popcountll: int -> int # extern __builtin_popcountl: int -> int # extern __builtin_popcount: int -> int # extern __builtin_parityll: int -> int # extern __builtin_parityl: int -> int # extern __builtin_parity: int -> int # extern __builtin_object_size: int -> int -> int # extern __builtin_next_arg: int # extern __builtin_nansl: int -> float # extern __builtin_nansf: int -> float # extern __builtin_nans: int -> float # extern __builtin_nanl: int -> float # extern __builtin_nanf: int -> float # extern __builtin_nan: int -> float # extern __builtin_modfl: float -> int -> float # extern __builtin_modff: float -> int -> float # extern __builtin_mempcpy: int -> int -> int -> int # extern __builtin_memcpy: int -> int -> int -> int # extern __builtin_logl: float -> float # extern __builtin_logf: float -> float # extern __builtin_log10l: float -> float # extern __builtin_log10f: float -> float # extern __builtin_log10: float -> float # extern __builtin_log: float -> float # extern __builtin_ldexpl: float -> int -> float # extern __builtin_ldexpf: float -> int -> float # extern __builtin_ldexp: float -> int -> float # extern __builtin_infl: float # extern __builtin_inff: float # extern __builtin_inf: float # extern __builtin_huge_vall: float # extern __builtin_huge_valf: float # extern __builtin_huge_val: float # extern __builtin_frexpl: float -> int -> float # extern __builtin_frexpf: float -> int -> float # extern __builtin_frexp: float -> int -> float # extern __builtin_frame_address: int -> int # extern __builtin_fmodl: float -> float # extern __builtin_fmodf: float -> float # extern __builtin_fmod: float -> float # extern __builtin_floorl: float -> float # extern __builtin_floorf: float -> float # extern __builtin_floor: float -> float # extern __builtin_ffsll: int -> int # extern __builtin_ffsl: int -> int # extern __builtin_ffs: int -> int # extern __builtin_fabsl: float -> float # extern __builtin_fabsf: float -> float # extern __builtin_fabs: float -> float # extern __builtin_expl: float -> float # extern __builtin_expf: float -> float # extern __builtin_expect: int -> int -> int # extern __builtin_exp: float -> float # extern __builtin_ctzll: int -> int # extern __builtin_ctzl: int -> int # extern __builtin_ctz: int -> int # extern __builtin_cosl: float -> float # extern __builtin_coshl: float -> float # extern __builtin_coshf: float -> float # extern __builtin_cosh: float -> float # extern __builtin_cosf: float -> float # extern __builtin_cos: float -> float # extern __builtin_constant_p: int -> int # extern __builtin_clzll: int -> int # extern __builtin_clzl: int -> int # extern __builtin_clz: int -> int # extern __builtin_ceill: float -> float # extern __builtin_ceilf: float -> float # extern __builtin_ceil: float -> float # extern __builtin_atanl: float -> float # extern __builtin_atanf: float -> float # extern __builtin_atan2l: float -> float -> float # extern __builtin_atan2f: float -> float -> float # extern __builtin_atan2: float -> float -> float # extern __builtin_atan: float -> float # extern __builtin_asinl: float -> float # extern __builtin_asinf: float -> float # extern __builtin_asin: float -> float # extern __builtin_alloca: int -> int # extern __builtin_acosl: float -> float # extern __builtin_acosf: float -> float # extern __builtin_acos: float -> float # extern __builtin___vsprintf_chk: int -> int -> int -> int -> int -> int # extern __builtin___vsnprintf_chk: int -> int -> int -> int -> int -> int -> int # extern __builtin___vprintf_chk: int -> int -> int -> int # extern __builtin___vfprintf_chk: int -> int -> int -> int -> int # extern __builtin___strncpy_chk: int -> int -> int -> int -> int # extern __builtin___strncat_chk: int -> int -> int -> int -> int # extern __builtin___strcpy_chk: int -> int -> int -> int # extern __builtin___strcat_chk: int -> int -> int -> int # extern __builtin___stpcpy_chk: int -> int -> int -> int # extern __builtin___memset_chk: int -> int -> int -> int -> int # extern __builtin___mempcpy_chk: int -> int -> int -> int -> int # extern __builtin___memmove_chk: int -> int -> int -> int -> int # extern __builtin___memcpy_chk: int -> int -> int -> int -> int # begin preamble .data globals: .space 20 nl: .asciiz "\n" .align 2 .text main: la $gp, globals j main48 print_int: li $v0, 1 syscall jr $ra print_intln: li $v0, 1 syscall la $a0, nl li $v0, 4 syscall jr $ra scan_int: li $v0, 5 syscall jr $ra alloc: li $v0, 9 syscall jr $ra pow2: li $v0, 1 sllv $v0, $v0, $a0 jr $ra mod: beqz $a0, mod0 beqz $a1, mod0 li $t2, 0 mod_t0: bgtz $a0, mod_a0_pos neg $t0, $a0 addi $t2, $t2, 1 j mod_t1 mod_a0_pos: move $t0, $a0 mod_t1: bgtz $a1, mod_a1_pos neg $t1, $a1 addi $t2, $t2, 2 j mod_main mod_a1_pos: move $t1, $a1 mod_main: rem $v0, $t0, $t1 beqz $t2, mod_exit addi $t2, -1 beqz $t2, mod_case1 addi $t2, -1 beqz $t2, mod_case2 neg $v0, $v0 j mod_exit mod_case1: sub $v0, $a1, $v0 j mod_exit mod_case2: add $v0, $a1, $v0 j mod_exit mod0: li $v0, 0 mod_exit: jr $ra toint: # $a0: size # $a1: int to convert addi $sp, $sp, -4 sw $ra, 0($sp) jal pow2 move $a0, $a1 move $a1, $v0 jal mod lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra toint8: addi $sp, $sp, -4 sw $ra, 0($sp) move $a1, $a0 li $a0, 8 jal toint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra toint16: addi $sp, $sp, -4 sw $ra, 0($sp) move $a1, $a0 li $a0, 16 jal toint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra sign_ext: # $a0: size # $a1: int to extend li $v0, 32 sub $a0, $v0, $a0 sllv $v0, $a1, $a0 srav $v0, $v0, $a0 jr $ra ofint: # $a0: signedness # $a1: size # $a2: int to convert addi $sp, $sp, -4 sw $ra, 0($sp) beqz $a0, ofint_unsigned move $a0, $a1 move $a1, $a2 jal sign_ext j ofint_exit ofint_unsigned: move $v0, $a2 ofint_exit: lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra ofint8: addi $sp, $sp, -4 sw $ra, 0($sp) move $a2, $a0 li $a1, 8 li $a0, 1 jal ofint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra ofuint8: addi $sp, $sp, -4 sw $ra, 0($sp) move $a2, $a0 li $a1, 8 li $a0, 0 jal ofint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra ofint16: addi $sp, $sp, -4 sw $ra, 0($sp) move $a2, $a0 li $a1, 16 li $a0, 1 jal ofint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra ofuint16: addi $sp, $sp, -4 sw $ra, 0($sp) move $a2, $a0 li $a1, 16 li $a0, 0 jal ofint lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra # end preamble # begin array_lecture array_lecture33: c2: li $v0, 4 mulo $v0, $a1, $v0 add $v0, $a0, $v0 lw $a1, 0($v0) c1: li $v0, 4 mulo $v0, $a2, $v0 add $v0, $a0, $v0 lw $v0, 0($v0) c0: add $v0, $a1, $v0 jr $ra # end array_lecture # begin _main main48: addi $sp, $sp, -4 sw $ra, 0($sp) li $a0, 1 move $v0, $gp sw $a0, 0($v0) li $a0, 2 move $v0, $gp sw $a0, 4($v0) li $a0, 3 move $v0, $gp sw $a0, 8($v0) li $a0, 5 move $v0, $gp sw $a0, 12($v0) li $a0, 8 move $v0, $gp sw $a0, 16($v0) c4: move $a0, $gp li $a1, 0 li $a2, 4 la $v0, array_lecture33 jalr $v0 c3: lw $ra, 0($sp) addi $sp, $sp, 4 jr $ra # end _main