mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +00:00
[mips] Enable arithmetic and binary operations for the i128 data type.
Summary: This patch adds support for some operations that were missing from 128-bit integer types (add/sub/mul/sdiv/udiv... etc.). With these changes we can support the __int128_t and __uint128_t data types from C/C++. Depends on D7125 Reviewers: dsanders Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7143 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227089 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=M2
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=32R1-R2 -check-prefix=32R1
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=32R1-R2 -check-prefix=32R2
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=32R6
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=M4
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=64R1-R2
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=64R1-R2
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \
|
||||
; RUN: -check-prefix=ALL -check-prefix=64R6
|
||||
; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=M2 -check-prefix=GP32
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=32R1-R2 -check-prefix=GP32
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=32R1-R2 -check-prefix=32R2 -check-prefix=GP32
|
||||
; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=32R6 -check-prefix=GP32
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=M4 -check-prefix=GP64-NOT-R6
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=64R1-R2 -check-prefix=GP64-NOT-R6
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=64R1-R2 -check-prefix=GP64 -check-prefix=GP64-NOT-R6
|
||||
; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s -check-prefix=ALL \
|
||||
; RUN: -check-prefix=64R6
|
||||
|
||||
define signext i1 @mul_i1(i1 signext %a, i1 signext %b) {
|
||||
entry:
|
||||
@@ -179,3 +179,30 @@ entry:
|
||||
%r = mul i64 %a, %b
|
||||
ret i64 %r
|
||||
}
|
||||
|
||||
define signext i128 @mul_i128(i128 signext %a, i128 signext %b) {
|
||||
entry:
|
||||
; ALL-LABEL: mul_i128:
|
||||
|
||||
; GP32: lw $25, %call16(__multi3)($gp)
|
||||
|
||||
; GP64-NOT-R6: dmult $4, $7
|
||||
; GP64-NOT-R6: mflo $[[T0:[0-9]+]]
|
||||
; GP64-NOT-R6: dmult $5, $6
|
||||
; GP64-NOT-R6: mflo $[[T1:[0-9]+]]
|
||||
; GP64-NOT-R6: dmultu $5, $7
|
||||
; GP64-NOT-R6: mflo $3
|
||||
; GP64-NOT-R6: mfhi $[[T2:[0-9]+]]
|
||||
; GP64-NOT-R6: daddu $[[T3:[0-9]+]], $[[T2]], $[[T1]]
|
||||
; GP64-NOT-R6: daddu $2, $[[T3:[0-9]+]], $[[T0]]
|
||||
|
||||
; 64R6: dmul $[[T0:[0-9]+]], $5, $6
|
||||
; 64R6: dmuhu $[[T1:[0-9]+]], $5, $7
|
||||
; 64R6: daddu $[[T2:[0-9]+]], $[[T1]], $[[T0]]
|
||||
; 64R6: dmul $[[T3:[0-9]+]], $4, $7
|
||||
; 64R6: daddu $2, $[[T2]], $[[T3]]
|
||||
; 64R6: dmul $3, $5, $7
|
||||
|
||||
%r = mul i128 %a, %b
|
||||
ret i128 %r
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user