From: Dmitry Selyutin Date: Sat, 2 Oct 2021 14:06:04 +0000 (+0000) Subject: extsxl implementation and examples X-Git-Tag: opf_rfc_ls005_v1~3781 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c4d38a120d205591e773438721461c88d93ddc1e;p=libreriscv.git extsxl implementation and examples --- diff --git a/openpower/sv/svp64/extsxl.mdwn b/openpower/sv/svp64/extsxl.mdwn new file mode 100644 index 000000000..96c8c42bb --- /dev/null +++ b/openpower/sv/svp64/extsxl.mdwn @@ -0,0 +1,44 @@ +# Implementation + + class Helper: + def __init__(self, XLEN): + self.XLEN = XLEN + + def EXTSXL(self, value, bits): + bits = min(bits, self.XLEN) + return SelectableInt(exts(value.value, bits) & ((1 << self.XLEN)-1), self.XLEN) + +# Table + +[[!table data=""" +func |pcode | +extsb|RA <- EXTSX(RS, 8) | +extsh|RA <- EXTSX(RS, 16)| +extsw|RA <- EXTSX(RS, 32)| +"""]] + +# Examples + + for xlen in (8, 16, 32, 64): + helper = Helper(xlen) + REG = lambda v: SelectableInt(v, xlen) + + assert helper.EXTSXL(REG(0xA000000090000A93), 64) == REG(0xA000000090000a93) + assert helper.EXTSXL(REG(0x0000000090000A93), 32) == REG(0xffffffff90000a93) + assert helper.EXTSXL(REG(0x000000000000F074), 16) == REG(0xfffffffffffff074) + assert helper.EXTSXL(REG(0x0000000000000091), 8) == REG(0xffffffffffffff91) + + assert helper.EXTSXL(REG(0x7000000090000A93), 64) == REG(0x7000000090000a93) + assert helper.EXTSXL(REG(0x0000000050000A93), 32) == REG(0x50000a93) + assert helper.EXTSXL(REG(0x0000000000001074), 16) == REG(0x1074) + assert helper.EXTSXL(REG(0x0000000000000031), 8) == REG(0x31) + + assert helper.EXTSXL(REG(0xA000000090000A93), 64) == REG(0xA000000090000a93) + assert helper.EXTSXL(REG(0x0000000090000A93), 64) == REG(0x90000a93) + assert helper.EXTSXL(REG(0x000000000000F074), 32) == REG(0xf074) + assert helper.EXTSXL(REG(0x0000000000000091), 16) == REG(0x91) + + assert helper.EXTSXL(REG(0x9999999999999999), 64) == REG(0x9999999999999999) + assert helper.EXTSXL(REG(0x9999999999999999), 32) == REG(0xFFFFFFFF99999999) + assert helper.EXTSXL(REG(0x9999999999999999), 16) == REG(0xFFFFFFFFFFFF9999) + assert helper.EXTSXL(REG(0x9999999999999999), 8) == REG(0xFFFFFFFFFFFFFF99)