Pseudo-code:
- prod[0:127] <- MULS((RA), EXTS(SI))
- RT <- prod[64:127]
+ prod[0:(XLEN*2)-1] <- MULS((RA), EXTS(SI))
+ RT <- prod[XLEN:(XLEN*2)-1]
Special Registers Altered:
Pseudo-code:
- prod[0:63] <- (RA)[32:63] * (RB)[32:63]
- RT[32:63] <- prod[0:31]
- RT[0:31] <- undefined(prod[0:31])
+ prod[0:XLEN-1] <- (RA)[XLEN/2:XLEN-1] * (RB)[XLEN/2:XLEN-1]
+ RT[XLEN/2:XLEN-1] <- prod[0:(XLEN/2)-1]
+ RT[0:(XLEN/2)-1] <- undefined(prod[0:(XLEN/2)-1])
Special Registers Altered:
Pseudo-code:
- dividend[0:31] <- (RA)[32:63]
- divisor[0:31] <- (RB) [32:63]
- if (((dividend = 0x8000_0000) &
- (divisor = [1]*32)) |
- (divisor = [0]*32)) then
- RT[0:63] <- undefined([0]*64)
+ dividend[0:(XLEN/2)-1] <- (RA)[XLEN/2:XLEN-1]
+ divisor[0:(XLEN/2)-1] <- (RB) [XLEN/2:XLEN-1]
+ if (((dividend = (0b1 || ([0b0] * ((XLEN/2)-1)))) &
+ (divisor = [1]*(XLEN/2))) |
+ (divisor = [0]*(XLEN/2))) then
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
else
- RT[32:63] <- DIVS(dividend, divisor)
- RT[0:31] <- undefined([0]*32)
+ RT[XLEN/2:XLEN-1] <- DIVS(dividend, divisor)
+ RT[0:(XLEN/2)-1] <- undefined([0]*(XLEN/2))
overflow <- 0
Special Registers Altered:
Pseudo-code:
- dividend[0:31] <- (RA)[32:63]
- divisor[0:31] <- (RB)[32:63]
+ dividend[0:(XLEN/2)-1] <- (RA)[XLEN/2:XLEN-1]
+ divisor[0:(XLEN/2)-1] <- (RB)[XLEN/2:XLEN-1]
if divisor != 0 then
- RT[32:63] <- dividend / divisor
- RT[0:31] <- undefined([0]*32)
+ RT[XLEN/2:XLEN-1] <- dividend / divisor
+ RT[0:(XLEN/2)-1] <- undefined([0]*(XLEN/2))
overflow <- 0
else
- RT[0:63] <- undefined([0]*64)
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
Special Registers Altered:
Pseudo-code:
- dividend[0:63] <- (RA)[32:63] || [0]*32
- divisor[0:63] <- EXTS64((RB)[32:63])
- if (((dividend = 0x8000_0000_0000_0000) &
- (divisor = [1]*64)) |
- (divisor = [0]*64)) then
+ dividend[0:XLEN-1] <- (RA)[XLEN/2:XLEN-1] || [0]*(XLEN/2)
+ divisor[0:XLEN-1] <- EXTS64((RB)[XLEN/2:XLEN-1])
+ if (((dividend = (0b1 || ([0b0] * (XLEN-1)))) &
+ (divisor = [1]*XLEN)) |
+ (divisor = [0]*XLEN)) then
overflow <- 1
else
result <- DIVS(dividend, divisor)
- result32[0:63] <- EXTS64(result[32:63])
- if (result32 = result) then
- RT[32:63] <- result[32:63]
- RT[0:31] <- undefined([0]*32)
+ result_half[0:XLEN-1] <- EXTS64(result[XLEN/2:XLEN-1])
+ if (result_half = result) then
+ RT[XLEN/2:XLEN-1] <- result[XLEN/2:XLEN-1]
+ RT[0:(XLEN/2)-1] <- undefined([0]*(XLEN/2))
overflow <- 0
else
overflow <- 1
if overflow = 1 then
- RT[0:63] <- undefined([0]*64)
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
Special Registers Altered:
Pseudo-code:
- dividend[0:63] <- (RA)[32:63] || [0]*32
- divisor[0:63] <- [0]*32 || (RB)[32:63]
- if (divisor = [0]*64) then
+ dividend[0:XLEN-1] <- (RA)[XLEN/2:XLEN-1] || [0]*(XLEN/2)
+ divisor[0:XLEN-1] <- [0]*(XLEN/2) || (RB)[XLEN/2:XLEN-1]
+ if (divisor = [0]*XLEN) then
overflow <- 1
else
result <- dividend / divisor
- if RA[32:63] <u RB[32:63] then
- RT[32:63] <- result[32:63]
- RT[0:31] <- undefined([0]*32)
+ if RA[XLEN/2:XLEN-1] <u RB[XLEN/2:XLEN-1] then
+ RT[XLEN/2:XLEN-1] <- result[XLEN/2:XLEN-1]
+ RT[0:(XLEN/2)-1] <- undefined([0]*(XLEN/2))
overflow <- 0
else
overflow <- 1
if overflow = 1 then
- RT[0:63] <- undefined([0]*64)
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
Special Registers Altered:
Pseudo-code:
- dividend[0:31] <- (RA)[32:63]
- divisor[0:31] <- (RB)[32:63]
- if (((dividend = 0x8000_0000) &
- (divisor = [1]*32)) |
- (divisor = [0]*32)) then
- RT[0:63] <- undefined([0]*64)
+ dividend[0:(XLEN/2)-1] <- (RA)[XLEN/2:XLEN-1]
+ divisor[0:(XLEN/2)-1] <- (RB)[XLEN/2:XLEN-1]
+ if (((dividend = (0b1 || ([0b0] * ((XLEN/2)-1)))) &
+ (divisor = [1]*(XLEN/2))) |
+ (divisor = [0]*(XLEN/2))) then
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
else
- RT[0:63] <- EXTS64(MODS(dividend, divisor))
- RT[0:31] <- undefined(RT[0:31])
+ RT[0:XLEN-1] <- EXTS64(MODS(dividend, divisor))
+ RT[0:(XLEN/2)-1] <- undefined(RT[0:(XLEN/2)-1])
overflow <- 0
Special Registers Altered:
Pseudo-code:
- dividend[0:31] <- (RA) [32:63]
- divisor [0:31] <- (RB) [32:63]
- if divisor = [0]*32 then
- RT[0:63] <- undefined([0]*64)
+ dividend[0:(XLEN/2)-1] <- (RA)[XLEN/2:63]
+ divisor [0:(XLEN/2)-1] <- (RB)[XLEN/2:63]
+ if divisor = [0]*(XLEN/2) then
+ RT[0:XLEN-1] <- undefined([0]*64)
overflow <- 1
else
- RT[32:63] <- dividend % divisor
- RT[0:31] <- undefined([0]*32)
+ RT[XLEN/2:XLEN-1] <- dividend % divisor
+ RT[0:(XLEN/2)-1] <- undefined([0]*(XLEN/2))
overflow <- 0
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- MULS((RA), (RB))
- RT <- prod[64:127]
- overflow <- ((prod[0:64] != [0]*65) &
- (prod[0:64] != [1]*65))
+ prod[0:(XLEN*2)-1] <- MULS((RA), (RB))
+ RT <- prod[XLEN:(XLEN*2)-1]
+ overflow <- ((prod[0:XLEN] != [0]*(XLEN+1)) &
+ (prod[0:XLEN] != [1]*(XLEN+1)))
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- MULS((RA), (RB))
- RT <- prod[0:63]
+ prod[0:(XLEN*2)-1] <- MULS((RA), (RB))
+ RT <- prod[0:XLEN-1]
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- (RA) * (RB)
- RT <- prod[0:63]
+ prod[0:(XLEN*2)-1] <- (RA) * (RB)
+ RT <- prod[0:XLEN-1]
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- MULS((RA), (RB))
- sum[0:127] <- prod + EXTS(RC)
- RT <- sum[0:63]
+ prod[0:(XLEN*2)-1] <- MULS((RA), (RB))
+ sum[0:(XLEN*2)-1] <- prod + EXTS(RC)[0:XLEN*2]
+ RT <- sum[0:XLEN-1]
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- (RA) * (RB)
- sum[0:127] <- prod + EXTZ(RC)
- RT <- sum[0:63]
+ prod[0:(XLEN*2)-1] <- (RA) * (RB)
+ sum[0:(XLEN*2)-1] <- prod + EXTZ(RC)
+ RT <- sum[0:XLEN-1]
Special Registers Altered:
Pseudo-code:
- prod[0:127] <- MULS((RA), (RB))
- sum[0:127] <- prod + EXTS(RC)
- RT <- sum[64:127]
+ prod[0:(XLEN*2)-1] <- MULS((RA), (RB))
+ sum[0:(XLEN*2)-1] <- prod + EXTS(RC)
+ RT <- sum[(XLEN*2):(XLEN*2)-1]
Special Registers Altered:
Pseudo-code:
- dividend[0:63] <- (RA)
- divisor[0:63] <- (RB)
- if (((dividend = 0x8000_0000_0000_0000) &
- (divisor = [1]*64)) |
- (divisor = [0]*64)) then
- RT[0:63] <- undefined([0]*64)
+ dividend[0:XLEN-1] <- (RA)
+ divisor[0:XLEN-1] <- (RB)
+ if (((dividend = (0b1 || ([0b0] * (XLEN-1)))) &
+ (divisor = [1]*XLEN)) |
+ (divisor = [0]*XLEN)) then
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
else
RT <- DIVS(dividend, divisor)
Pseudo-code:
- dividend[0:63] <- (RA)
- divisor[0:63] <- (RB)
- if (divisor = [0]*64) then
- RT[0:63] <- undefined([0]*64)
+ dividend[0:XLEN-1] <- (RA)
+ divisor[0:XLEN-1] <- (RB)
+ if (divisor = [0]*XLEN) then
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
else
RT <- dividend / divisor
Pseudo-code:
- dividend[0:127] <- (RA) || [0]*64
- divisor[0:127] <- EXTS128((RB))
- if (((dividend = 0x8000_0000_0000_0000_0000_0000_0000_0000) &
- (divisor = [1]*128)) |
- (divisor = [0]*128)) then
+ dividend[0:(XLEN*2)-1] <- (RA) || [0]*XLEN
+ divisor[0:(XLEN*2)-1] <- EXTS128((RB))
+ if (((dividend = (0b1 || ([0b0] * ((XLEN*2)-1)))) &
+ (divisor = [1]*(XLEN*2))) |
+ (divisor = [0]*(XLEN*2))) then
overflow <- 1
else
result <- DIVS(dividend, divisor)
- result64[0:127] <- EXTS128(result[64:127])
- if (result64 = result) then
- RT <- result[64:127]
+ result_half[0:(XLEN*2)-1] <- EXTS128(result[XLEN:(XLEN*2)-1])
+ if (result_half = result) then
+ RT <- result[XLEN:(XLEN*2)-1]
overflow <- 0
else
overflow <- 1
if overflow = 1 then
- RT[0:63] <- undefined([0]*64)
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
Special Registers Altered:
Pseudo-code:
- dividend[0:127] <- (RA) || [0]*64
- divisor[0:127] <- [0]*64 || (RB)
- if divisor = [0]*128 then
+ dividend[0:(XLEN*2)-1] <- (RA) || [0]*XLEN
+ divisor[0:(XLEN*2)-1] <- [0]*XLEN || (RB)
+ if divisor = [0]*(XLEN*2) then
overflow <- 1
else
result <- dividend / divisor
if (RA) <u (RB) then
- RT <- result[64:127]
+ RT <- result[XLEN:(XLEN*2)-1]
overflow <- 0
else
overflow <- 1
if overflow = 1 then
- RT[0:63] <- undefined([0]*64)
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
Special Registers Altered:
dividend <- (RA)
divisor <- (RB)
- if (((dividend = 0x8000_0000_0000_0000) &
- (divisor = [1]*64)) |
- (divisor = [0]*64)) then
- RT[0:63] <- undefined([0]*64)
+ if (((dividend = (0b1 || ([0b0] * (XLEN-1)))) &
+ (divisor = [1]*XLEN)) |
+ (divisor = [0]*XLEN)) then
+ RT[0:63] <- undefined([0]*XLEN)
overflow <- 1
else
RT <- MODS(dividend, divisor)
dividend <- (RA)
divisor <- (RB)
- if (divisor = [0]*64) then
- RT[0:63] <- undefined([0]*64)
+ if (divisor = [0]*XLEN) then
+ RT[0:XLEN-1] <- undefined([0]*XLEN)
overflow <- 1
else
RT <- dividend % divisor