pysvp64db: fix traversal
[openpower-isa.git] / openpower / isa / bcd.mdwn
1 <!-- Instructions here described in PowerISA Version 3.0 B Book 1 -->
2
3 <!-- Section 3.3.15 Binary Coded Decimal (BCD) Assist Instructions. Page 111 -->
4
5 <!-- The Binary Coded Decimal Assist instructions operate on Binary Coded Decimal -->
6 <!-- operands (cbcdtd and addg6s) and Decimal Floating-Point operands (cdtbcd) -->
7 <!-- See Chapter 5. for additional information. -->
8
9
10 # Convert Declets To Binary Coded Decimal
11
12 X-Form
13
14 * cdtbcd RA,RS
15
16 Pseudo-code:
17
18 src <- [0]*64
19 src[64-XLEN:63] <- (RS)
20 result <- [0]*64
21 do i = 0 to 1
22 n <- i * 32
23 result[n+0:n+7] <- 0
24 result[n+8:n+19] <- DPD_TO_BCD(src[n+12:n+21])
25 result[n+20:n+31] <- DPD_TO_BCD(src[n+22:n+31])
26 RA <- result[64-XLEN:63]
27
28 Special Registers Altered:
29
30 None
31
32 # Add and Generate Sixes
33
34 XO-Form
35
36 * addg6s RT,RA,RB
37
38 Pseudo-code:
39
40 sum <- (0b0000 || (RA)) + (0b0000 || (RB))
41 carries <- sum ^ (0b0000 || (RA)) ^ (0b0000 || (RB))
42 ones <- [0b0001] * (XLEN / 4)
43 nibbles_need_sixes <- ¬carries[0:XLEN-1] & ones
44 RT <- nibbles_need_sixes * 0b0110
45
46 Special Registers Altered:
47
48 None
49
50 # Convert Binary Coded Decimal To Declets
51
52 X-Form
53
54 * cbcdtd RA,RS
55
56 Pseudo-code:
57
58 src <- [0]*64
59 src[64-XLEN:63] <- (RS)
60 result <- [0]*64
61 do i = 0 to 1
62 n <- i * 32
63 result[n+0:n+11] <- 0
64 result[n+12:n+21] <- BCD_TO_DPD(src[n+8:n+19])
65 result[n+22:n+31] <- BCD_TO_DPD(src[n+20:n+31])
66 RA <- result[64-XLEN:63]
67
68 Special Registers Altered:
69
70 None
71
72 <!-- Checked March 2021 -->