|
63 | 63 | ;; pmuludq
|
64 | 64 | ;; Reference: Vol. 2B 4-370
|
65 | 65 | (defun PMULDQrr (dst _ src)
|
66 |
| - (pmul dst src)) |
| 66 | + (pmul set$ cast-signed dst src)) |
67 | 67 |
|
68 | 68 | (defun PMULDQrm (dst _ base _ _ off _)
|
69 | 69 | (let ((src (load-dword (+ base off))))
|
70 |
| - (pmul dst src))) |
| 70 | + (pmul set$ cast-signed dst src))) |
71 | 71 |
|
72 |
| -(defun pmul (dst src) |
| 72 | +(defun PMULUDQrr (dst _ src) |
| 73 | + (pmul set$ cast-unsigned dst src)) |
| 74 | + |
| 75 | +(defun PMULUDQrm (dst _ base _ _ off _) |
| 76 | + (let ((src (load-dword (+ base off)))) |
| 77 | + (pmul set$ cast-unsigned dst src))) |
| 78 | + |
| 79 | +(defun VPMULDQrr (dst _ src) |
| 80 | + (pmul setv cast-signed dst src)) |
| 81 | + |
| 82 | +(defun VPMULDQrm (dst _ base _ _ off _) |
| 83 | + (let ((src (load-dword (+ base off)))) |
| 84 | + (pmul setv cast-signed dst src))) |
| 85 | + |
| 86 | +(defun VPMULUDQrr (dst _ src) |
| 87 | + (pmul setv cast-unsigned dst src)) |
| 88 | + |
| 89 | +(defun VPMULUDQrm (dst _ base _ _ off _) |
| 90 | + (let ((src (load-dword (+ base off)))) |
| 91 | + (pmul setv cast-unsigned dst src))) |
| 92 | + |
| 93 | +(defun VPMULDQYrr (dst _ src) |
| 94 | + (pmuly cast-signed dst src)) |
| 95 | + |
| 96 | +(defun VPMULDQYrm (dst _ base _ _ off _) |
| 97 | + (let ((src (load-dword (+ base off)))) |
| 98 | + (pmuly cast-signed dst src))) |
| 99 | + |
| 100 | +(defun VPMULUDQYrr (dst _ src) |
| 101 | + (pmuly cast-unsigned dst src)) |
| 102 | + |
| 103 | +(defun VPMULUDQYrm (dst _ base _ _ off _) |
| 104 | + (let ((src (load-dword (+ base off)))) |
| 105 | + (pmuly cast-unsigned dst src))) |
| 106 | + |
| 107 | +(defmacro pmul (set cast dst src) |
| 108 | + (declare (visibility :private)) |
| 109 | + (let ((hi (* (cast 64 (extract 95 64 dst)) |
| 110 | + (cast 64 (extract 95 64 src)))) |
| 111 | + (lo (* (cast 64 (extract 31 0 dst)) |
| 112 | + (cast 64 (extract 31 0 src))))) |
| 113 | + (set dst (concat hi lo)))) |
| 114 | + |
| 115 | +(defmacro pmuly (cast dst src) |
73 | 116 | (declare (visibility :private))
|
74 |
| - (let ((hi (* (cast-signed 64 (extract 95 64 dst)) |
75 |
| - (cast-signed 64 (extract 95 64 src)))) |
76 |
| - (lo (* (cast-signed 64 (extract 31 0 dst)) |
77 |
| - (cast-signed 64 (extract 31 0 src))))) |
78 |
| - (set$ dst (concat hi lo)))) |
| 117 | + (let ((w4 (* (cast 64 (extract 223 192 dst)) |
| 118 | + (cast 64 (extract 223 192 src)))) |
| 119 | + (w3 (* (cast 64 (extract 159 128 dst)) |
| 120 | + (cast 64 (extract 159 128 src)))) |
| 121 | + (w2 (* (cast 64 (extract 95 64 dst)) |
| 122 | + (cast 64 (extract 95 64 src)))) |
| 123 | + (w1 (* (cast 64 (extract 31 0 dst)) |
| 124 | + (cast 64 (extract 31 0 src))))) |
| 125 | + (set$ dst (concat w4 w3 w2 w1)))) |
79 | 126 |
|
80 | 127 |
|
81 | 128 | ;; pack{u,s}sdw/pack{u,s}swb
|
|
0 commit comments