blob: 474ec40d5256f00353970d9e27ee03bffa96dcf8 [file] [log] [blame]
Nicolas Capens0bac2852016-05-07 06:09:58 -04001// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Nicolas Capensd022e412016-09-26 13:30:14 -040015#ifndef sw_x86_hpp
16#define sw_x86_hpp
17
18#include "Reactor.hpp"
Nicolas Capens0bac2852016-05-07 06:09:58 -040019
Nicolas Capens157ba262019-12-10 17:49:14 -050020namespace rr {
21namespace x86 {
Nicolas Capens0bac2852016-05-07 06:09:58 -040022
Nicolas Capens157ba262019-12-10 17:49:14 -050023RValue<Int> cvtss2si(RValue<Float> val);
24RValue<Int4> cvtps2dq(RValue<Float4> val);
Nicolas Capens0bac2852016-05-07 06:09:58 -040025
Nicolas Capens157ba262019-12-10 17:49:14 -050026RValue<Float> rcpss(RValue<Float> val);
27RValue<Float> sqrtss(RValue<Float> val);
28RValue<Float> rsqrtss(RValue<Float> val);
Nicolas Capens0bac2852016-05-07 06:09:58 -040029
Nicolas Capens157ba262019-12-10 17:49:14 -050030RValue<Float4> rcpps(RValue<Float4> val);
31RValue<Float4> sqrtps(RValue<Float4> val);
32RValue<Float4> rsqrtps(RValue<Float4> val);
33RValue<Float4> maxps(RValue<Float4> x, RValue<Float4> y);
34RValue<Float4> minps(RValue<Float4> x, RValue<Float4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040035
Nicolas Capens157ba262019-12-10 17:49:14 -050036RValue<Float> roundss(RValue<Float> val, unsigned char imm);
37RValue<Float> floorss(RValue<Float> val);
38RValue<Float> ceilss(RValue<Float> val);
Nicolas Capens0bac2852016-05-07 06:09:58 -040039
Nicolas Capens157ba262019-12-10 17:49:14 -050040RValue<Float4> roundps(RValue<Float4> val, unsigned char imm);
41RValue<Float4> floorps(RValue<Float4> val);
42RValue<Float4> ceilps(RValue<Float4> val);
Nicolas Capens0bac2852016-05-07 06:09:58 -040043
Nicolas Capens157ba262019-12-10 17:49:14 -050044RValue<Int4> pabsd(RValue<Int4> x);
Nicolas Capens0bac2852016-05-07 06:09:58 -040045
Nicolas Capens157ba262019-12-10 17:49:14 -050046RValue<Short4> paddsw(RValue<Short4> x, RValue<Short4> y);
47RValue<Short4> psubsw(RValue<Short4> x, RValue<Short4> y);
48RValue<UShort4> paddusw(RValue<UShort4> x, RValue<UShort4> y);
49RValue<UShort4> psubusw(RValue<UShort4> x, RValue<UShort4> y);
50RValue<SByte8> paddsb(RValue<SByte8> x, RValue<SByte8> y);
51RValue<SByte8> psubsb(RValue<SByte8> x, RValue<SByte8> y);
52RValue<Byte8> paddusb(RValue<Byte8> x, RValue<Byte8> y);
53RValue<Byte8> psubusb(RValue<Byte8> x, RValue<Byte8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040054
Nicolas Capens157ba262019-12-10 17:49:14 -050055RValue<UShort4> pavgw(RValue<UShort4> x, RValue<UShort4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040056
Nicolas Capens157ba262019-12-10 17:49:14 -050057RValue<Short4> pmaxsw(RValue<Short4> x, RValue<Short4> y);
58RValue<Short4> pminsw(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040059
Nicolas Capens157ba262019-12-10 17:49:14 -050060RValue<Short4> pcmpgtw(RValue<Short4> x, RValue<Short4> y);
61RValue<Short4> pcmpeqw(RValue<Short4> x, RValue<Short4> y);
62RValue<Byte8> pcmpgtb(RValue<SByte8> x, RValue<SByte8> y);
63RValue<Byte8> pcmpeqb(RValue<Byte8> x, RValue<Byte8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040064
Nicolas Capens157ba262019-12-10 17:49:14 -050065RValue<Short4> packssdw(RValue<Int2> x, RValue<Int2> y);
66RValue<Short8> packssdw(RValue<Int4> x, RValue<Int4> y);
67RValue<SByte8> packsswb(RValue<Short4> x, RValue<Short4> y);
68RValue<Byte8> packuswb(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040069
Nicolas Capens157ba262019-12-10 17:49:14 -050070RValue<UShort8> packusdw(RValue<Int4> x, RValue<Int4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040071
Nicolas Capens157ba262019-12-10 17:49:14 -050072RValue<UShort4> psrlw(RValue<UShort4> x, unsigned char y);
73RValue<UShort8> psrlw(RValue<UShort8> x, unsigned char y);
74RValue<Short4> psraw(RValue<Short4> x, unsigned char y);
75RValue<Short8> psraw(RValue<Short8> x, unsigned char y);
76RValue<Short4> psllw(RValue<Short4> x, unsigned char y);
77RValue<Short8> psllw(RValue<Short8> x, unsigned char y);
78RValue<Int2> pslld(RValue<Int2> x, unsigned char y);
79RValue<Int4> pslld(RValue<Int4> x, unsigned char y);
80RValue<Int2> psrad(RValue<Int2> x, unsigned char y);
81RValue<Int4> psrad(RValue<Int4> x, unsigned char y);
82RValue<UInt2> psrld(RValue<UInt2> x, unsigned char y);
83RValue<UInt4> psrld(RValue<UInt4> x, unsigned char y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040084
Nicolas Capens157ba262019-12-10 17:49:14 -050085RValue<Int4> pmaxsd(RValue<Int4> x, RValue<Int4> y);
86RValue<Int4> pminsd(RValue<Int4> x, RValue<Int4> y);
87RValue<UInt4> pmaxud(RValue<UInt4> x, RValue<UInt4> y);
88RValue<UInt4> pminud(RValue<UInt4> x, RValue<UInt4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040089
Nicolas Capens157ba262019-12-10 17:49:14 -050090RValue<Short4> pmulhw(RValue<Short4> x, RValue<Short4> y);
91RValue<UShort4> pmulhuw(RValue<UShort4> x, RValue<UShort4> y);
92RValue<Int2> pmaddwd(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040093
Nicolas Capens157ba262019-12-10 17:49:14 -050094RValue<Short8> pmulhw(RValue<Short8> x, RValue<Short8> y);
95RValue<UShort8> pmulhuw(RValue<UShort8> x, RValue<UShort8> y);
96RValue<Int4> pmaddwd(RValue<Short8> x, RValue<Short8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040097
Nicolas Capens157ba262019-12-10 17:49:14 -050098RValue<Int> movmskps(RValue<Float4> x);
99RValue<Int> pmovmskb(RValue<Byte8> x);
100
101RValue<Int4> pmovzxbd(RValue<Byte16> x);
102RValue<Int4> pmovsxbd(RValue<SByte16> x);
103RValue<Int4> pmovzxwd(RValue<UShort8> x);
104RValue<Int4> pmovsxwd(RValue<Short8> x);
105
106} // namespace x86
107} // namespace rr
Nicolas Capensd022e412016-09-26 13:30:14 -0400108
Ben Clayton713b8d32019-12-17 20:37:56 +0000109#endif // rr_x86_hpp