Changeset View
Changeset View
Standalone View
Standalone View
sys/mips/mips/fp.S
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | */ | ||||
or v1, v1, v0 | or v1, v1, v0 | ||||
cfc1 a1, MIPS_FPU_CSR # get exception register | cfc1 a1, MIPS_FPU_CSR # get exception register | ||||
lw a3, func_fmt_tbl(v1) # switch on FUNC & FMT | lw a3, func_fmt_tbl(v1) # switch on FUNC & FMT | ||||
and a1, a1, ~MIPS_FPU_EXCEPTION_UNIMPL # clear exception | and a1, a1, ~MIPS_FPU_EXCEPTION_UNIMPL # clear exception | ||||
ctc1 a1, MIPS_FPU_CSR | ctc1 a1, MIPS_FPU_CSR | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
func_fmt_tbl: | func_fmt_tbl: | ||||
.word add_s # 0 | .word add_s # 0 | ||||
.word add_d # 0 | .word add_d # 0 | ||||
.word ill # 0 | .word ill # 0 | ||||
.word ill # 0 | .word ill # 0 | ||||
.word ill # 0 | .word ill # 0 | ||||
.word ill # 0 | .word ill # 0 | ||||
.word ill # 0 | .word ill # 0 | ||||
▲ Show 20 Lines • Show All 2,140 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
LEAF(get_fs_int) | LEAF(get_fs_int) | ||||
srl a3, a0, 12 - 2 # get FS field (even regs only) | srl a3, a0, 12 - 2 # get FS field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FS field | and a3, a3, 0xF << 2 # mask FS field | ||||
lw a3, get_fs_int_tbl(a3) # switch on register number | lw a3, get_fs_int_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
get_fs_int_tbl: | get_fs_int_tbl: | ||||
.word get_fs_int_f0 | .word get_fs_int_f0 | ||||
.word get_fs_int_f2 | .word get_fs_int_f2 | ||||
.word get_fs_int_f4 | .word get_fs_int_f4 | ||||
.word get_fs_int_f6 | .word get_fs_int_f6 | ||||
.word get_fs_int_f8 | .word get_fs_int_f8 | ||||
.word get_fs_int_f10 | .word get_fs_int_f10 | ||||
.word get_fs_int_f12 | .word get_fs_int_f12 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
LEAF(get_ft_fs_s) | LEAF(get_ft_fs_s) | ||||
srl a3, a0, 17 - 2 # get FT field (even regs only) | srl a3, a0, 17 - 2 # get FT field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FT field | and a3, a3, 0xF << 2 # mask FT field | ||||
lw a3, get_ft_s_tbl(a3) # switch on register number | lw a3, get_ft_s_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
get_ft_s_tbl: | get_ft_s_tbl: | ||||
.word get_ft_s_f0 | .word get_ft_s_f0 | ||||
.word get_ft_s_f2 | .word get_ft_s_f2 | ||||
.word get_ft_s_f4 | .word get_ft_s_f4 | ||||
.word get_ft_s_f6 | .word get_ft_s_f6 | ||||
.word get_ft_s_f8 | .word get_ft_s_f8 | ||||
.word get_ft_s_f10 | .word get_ft_s_f10 | ||||
.word get_ft_s_f12 | .word get_ft_s_f12 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
XLEAF(get_fs_s) | XLEAF(get_fs_s) | ||||
srl a3, a0, 12 - 2 # get FS field (even regs only) | srl a3, a0, 12 - 2 # get FS field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FS field | and a3, a3, 0xF << 2 # mask FS field | ||||
lw a3, get_fs_s_tbl(a3) # switch on register number | lw a3, get_fs_s_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
get_fs_s_tbl: | get_fs_s_tbl: | ||||
.word get_fs_s_f0 | .word get_fs_s_f0 | ||||
.word get_fs_s_f2 | .word get_fs_s_f2 | ||||
.word get_fs_s_f4 | .word get_fs_s_f4 | ||||
.word get_fs_s_f6 | .word get_fs_s_f6 | ||||
.word get_fs_s_f8 | .word get_fs_s_f8 | ||||
.word get_fs_s_f10 | .word get_fs_s_f10 | ||||
.word get_fs_s_f12 | .word get_fs_s_f12 | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
LEAF(get_ft_fs_d) | LEAF(get_ft_fs_d) | ||||
srl a3, a0, 17 - 2 # get FT field (even regs only) | srl a3, a0, 17 - 2 # get FT field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FT field | and a3, a3, 0xF << 2 # mask FT field | ||||
lw a3, get_ft_d_tbl(a3) # switch on register number | lw a3, get_ft_d_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
get_ft_d_tbl: | get_ft_d_tbl: | ||||
.word get_ft_d_f0 | .word get_ft_d_f0 | ||||
.word get_ft_d_f2 | .word get_ft_d_f2 | ||||
.word get_ft_d_f4 | .word get_ft_d_f4 | ||||
.word get_ft_d_f6 | .word get_ft_d_f6 | ||||
.word get_ft_d_f8 | .word get_ft_d_f8 | ||||
.word get_ft_d_f10 | .word get_ft_d_f10 | ||||
.word get_ft_d_f12 | .word get_ft_d_f12 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
XLEAF(get_fs_d) | XLEAF(get_fs_d) | ||||
srl a3, a0, 12 - 2 # get FS field (even regs only) | srl a3, a0, 12 - 2 # get FS field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FS field | and a3, a3, 0xF << 2 # mask FS field | ||||
lw a3, get_fs_d_tbl(a3) # switch on register number | lw a3, get_fs_d_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
get_fs_d_tbl: | get_fs_d_tbl: | ||||
.word get_fs_d_f0 | .word get_fs_d_f0 | ||||
.word get_fs_d_f2 | .word get_fs_d_f2 | ||||
.word get_fs_d_f4 | .word get_fs_d_f4 | ||||
.word get_fs_d_f6 | .word get_fs_d_f6 | ||||
.word get_fs_d_f8 | .word get_fs_d_f8 | ||||
.word get_fs_d_f10 | .word get_fs_d_f10 | ||||
.word get_fs_d_f12 | .word get_fs_d_f12 | ||||
▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
LEAF(get_cmp_s) | LEAF(get_cmp_s) | ||||
srl a3, a0, 12 - 2 # get FS field (even regs only) | srl a3, a0, 12 - 2 # get FS field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FS field | and a3, a3, 0xF << 2 # mask FS field | ||||
lw a3, cmp_fs_s_tbl(a3) # switch on register number | lw a3, cmp_fs_s_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
cmp_fs_s_tbl: | cmp_fs_s_tbl: | ||||
.word cmp_fs_s_f0 | .word cmp_fs_s_f0 | ||||
.word cmp_fs_s_f2 | .word cmp_fs_s_f2 | ||||
.word cmp_fs_s_f4 | .word cmp_fs_s_f4 | ||||
.word cmp_fs_s_f6 | .word cmp_fs_s_f6 | ||||
.word cmp_fs_s_f8 | .word cmp_fs_s_f8 | ||||
.word cmp_fs_s_f10 | .word cmp_fs_s_f10 | ||||
.word cmp_fs_s_f12 | .word cmp_fs_s_f12 | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | cmp_fs_s_done: | ||||
and t2, t0, 0x7FFFFF # get fraction | and t2, t0, 0x7FFFFF # get fraction | ||||
srl t0, t0, 31 # get sign | srl t0, t0, 31 # get sign | ||||
srl a3, a0, 17 - 2 # get FT field (even regs only) | srl a3, a0, 17 - 2 # get FT field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FT field | and a3, a3, 0xF << 2 # mask FT field | ||||
lw a3, cmp_ft_s_tbl(a3) # switch on register number | lw a3, cmp_ft_s_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
cmp_ft_s_tbl: | cmp_ft_s_tbl: | ||||
.word cmp_ft_s_f0 | .word cmp_ft_s_f0 | ||||
.word cmp_ft_s_f2 | .word cmp_ft_s_f2 | ||||
.word cmp_ft_s_f4 | .word cmp_ft_s_f4 | ||||
.word cmp_ft_s_f6 | .word cmp_ft_s_f6 | ||||
.word cmp_ft_s_f8 | .word cmp_ft_s_f8 | ||||
.word cmp_ft_s_f10 | .word cmp_ft_s_f10 | ||||
.word cmp_ft_s_f12 | .word cmp_ft_s_f12 | ||||
▲ Show 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | |||||
*---------------------------------------------------------------------------- | *---------------------------------------------------------------------------- | ||||
*/ | */ | ||||
LEAF(get_cmp_d) | LEAF(get_cmp_d) | ||||
srl a3, a0, 12 - 2 # get FS field (even regs only) | srl a3, a0, 12 - 2 # get FS field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FS field | and a3, a3, 0xF << 2 # mask FS field | ||||
lw a3, cmp_fs_d_tbl(a3) # switch on register number | lw a3, cmp_fs_d_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
cmp_fs_d_tbl: | cmp_fs_d_tbl: | ||||
.word cmp_fs_d_f0 | .word cmp_fs_d_f0 | ||||
.word cmp_fs_d_f2 | .word cmp_fs_d_f2 | ||||
.word cmp_fs_d_f4 | .word cmp_fs_d_f4 | ||||
.word cmp_fs_d_f6 | .word cmp_fs_d_f6 | ||||
.word cmp_fs_d_f8 | .word cmp_fs_d_f8 | ||||
.word cmp_fs_d_f10 | .word cmp_fs_d_f10 | ||||
.word cmp_fs_d_f12 | .word cmp_fs_d_f12 | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | cmp_fs_d_done: | ||||
and t2, t0, 0xFFFFF # get fraction | and t2, t0, 0xFFFFF # get fraction | ||||
srl t0, t0, 31 # get sign | srl t0, t0, 31 # get sign | ||||
srl a3, a0, 17 - 2 # get FT field (even regs only) | srl a3, a0, 17 - 2 # get FT field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FT field | and a3, a3, 0xF << 2 # mask FT field | ||||
lw a3, cmp_ft_d_tbl(a3) # switch on register number | lw a3, cmp_ft_d_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
cmp_ft_d_tbl: | cmp_ft_d_tbl: | ||||
.word cmp_ft_d_f0 | .word cmp_ft_d_f0 | ||||
.word cmp_ft_d_f2 | .word cmp_ft_d_f2 | ||||
.word cmp_ft_d_f4 | .word cmp_ft_d_f4 | ||||
.word cmp_ft_d_f6 | .word cmp_ft_d_f6 | ||||
.word cmp_ft_d_f8 | .word cmp_ft_d_f8 | ||||
.word cmp_ft_d_f10 | .word cmp_ft_d_f10 | ||||
.word cmp_ft_d_f12 | .word cmp_ft_d_f12 | ||||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | LEAF(set_fd_s) | ||||
or t2, t2, t0 | or t2, t2, t0 | ||||
or t2, t2, t1 | or t2, t2, t1 | ||||
XLEAF(set_fd_word) | XLEAF(set_fd_word) | ||||
srl a3, a0, 7 - 2 # get FD field (even regs only) | srl a3, a0, 7 - 2 # get FD field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FT field | and a3, a3, 0xF << 2 # mask FT field | ||||
lw a3, set_fd_s_tbl(a3) # switch on register number | lw a3, set_fd_s_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
set_fd_s_tbl: | set_fd_s_tbl: | ||||
.word set_fd_s_f0 | .word set_fd_s_f0 | ||||
.word set_fd_s_f2 | .word set_fd_s_f2 | ||||
.word set_fd_s_f4 | .word set_fd_s_f4 | ||||
.word set_fd_s_f6 | .word set_fd_s_f6 | ||||
.word set_fd_s_f8 | .word set_fd_s_f8 | ||||
.word set_fd_s_f10 | .word set_fd_s_f10 | ||||
.word set_fd_s_f12 | .word set_fd_s_f12 | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | LEAF(set_fd_d) | ||||
sll t1, t1, 20 # set exponent | sll t1, t1, 20 # set exponent | ||||
or t0, t0, t1 | or t0, t0, t1 | ||||
or t0, t0, t2 # set fraction | or t0, t0, t2 # set fraction | ||||
srl a3, a0, 7 - 2 # get FD field (even regs only) | srl a3, a0, 7 - 2 # get FD field (even regs only) | ||||
and a3, a3, 0xF << 2 # mask FD field | and a3, a3, 0xF << 2 # mask FD field | ||||
lw a3, set_fd_d_tbl(a3) # switch on register number | lw a3, set_fd_d_tbl(a3) # switch on register number | ||||
j a3 | j a3 | ||||
.rdata | .section .rdata | ||||
set_fd_d_tbl: | set_fd_d_tbl: | ||||
.word set_fd_d_f0 | .word set_fd_d_f0 | ||||
.word set_fd_d_f2 | .word set_fd_d_f2 | ||||
.word set_fd_d_f4 | .word set_fd_d_f4 | ||||
.word set_fd_d_f6 | .word set_fd_d_f6 | ||||
.word set_fd_d_f8 | .word set_fd_d_f8 | ||||
.word set_fd_d_f10 | .word set_fd_d_f10 | ||||
.word set_fd_d_f12 | .word set_fd_d_f12 | ||||
▲ Show 20 Lines • Show All 302 Lines • Show Last 20 Lines |