about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-12 16:32:42 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-12 16:32:42 +0100
commit9186f5eeeb5f5db470feba1d1015de905295b75a (patch)
treefa2fd5fcefa2fd3d55ceb585670505033ceb78e5 /src
parent216e70756cb1fdaf064c9d11fe205c7c62ee63d5 (diff)
downloadbox64-9186f5eeeb5f5db470feba1d1015de905295b75a.tar.gz
box64-9186f5eeeb5f5db470feba1d1015de905295b75a.zip
[ARM64_DYNAREC] Added 66 0F 3A 0E opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_660f.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index b54638d7..d994f865 100755
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -650,6 +650,42 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     VMOVeD(q0, 0, v1, 0);

                     break;

 

+                case 0x0E:

+                    INST_NAME("PBLENDW Gx, Ex, Ib");

+                    nextop = F8;

+                    GETGX(q0, 1);

+                    GETEX(q1, 0, 1);

+                    u8 = F8;

+                    i32 = 0;

+                    if(q0!=q1)

+                        while(u8) {

+                            if(u8&1) {

+                                if(!(i32&1) && u8&2) {

+                                    if(!(i32&1) && (u8&0xf)==0xf) {

+                                        // whole 64bits

+                                        VMOVeD(q0, i32>>2, q1, i32>>2);

+                                        i32+=4;

+                                        u8>>=4;

+                                    } else {

+                                        // 32bits

+                                        VMOVeS(q0, i32>>1, q1, i32>>1);

+                                        i32+=2;

+                                        u8>>=2;

+                                    }

+                                } else {

+                                    // 16 bits

+                                    VMOVeH(q0, i32, q1, i32);

+                                    i32++;

+                                    u8>>=1;

+                                }

+                            } else {

+                                // nope

+                                i32++;

+                                u8>>=1;

+                            }

+

+                        }

+                    break;

                 case 0x0F:

                     INST_NAME("PALIGNR Gx, Ex, Ib");

                     nextop = F8;