blob: 5663f40d83e7bb79bd523c2a1605e478df74ca89 [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<Short4> paddsw(RValue<Short4> x, RValue<Short4> y);
45RValue<Short4> psubsw(RValue<Short4> x, RValue<Short4> y);
46RValue<UShort4> paddusw(RValue<UShort4> x, RValue<UShort4> y);
47RValue<UShort4> psubusw(RValue<UShort4> x, RValue<UShort4> y);
48RValue<SByte8> paddsb(RValue<SByte8> x, RValue<SByte8> y);
49RValue<SByte8> psubsb(RValue<SByte8> x, RValue<SByte8> y);
50RValue<Byte8> paddusb(RValue<Byte8> x, RValue<Byte8> y);
51RValue<Byte8> psubusb(RValue<Byte8> x, RValue<Byte8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040052
Nicolas Capens157ba262019-12-10 17:49:14 -050053RValue<UShort4> pavgw(RValue<UShort4> x, RValue<UShort4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040054
Nicolas Capens157ba262019-12-10 17:49:14 -050055RValue<Short4> pmaxsw(RValue<Short4> x, RValue<Short4> y);
56RValue<Short4> pminsw(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040057
Nicolas Capens157ba262019-12-10 17:49:14 -050058RValue<Short4> pcmpgtw(RValue<Short4> x, RValue<Short4> y);
59RValue<Short4> pcmpeqw(RValue<Short4> x, RValue<Short4> y);
60RValue<Byte8> pcmpgtb(RValue<SByte8> x, RValue<SByte8> y);
61RValue<Byte8> pcmpeqb(RValue<Byte8> x, RValue<Byte8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040062
Nicolas Capens157ba262019-12-10 17:49:14 -050063RValue<Short4> packssdw(RValue<Int2> x, RValue<Int2> y);
64RValue<Short8> packssdw(RValue<Int4> x, RValue<Int4> y);
65RValue<SByte8> packsswb(RValue<Short4> x, RValue<Short4> y);
66RValue<Byte8> packuswb(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040067
Nicolas Capens157ba262019-12-10 17:49:14 -050068RValue<UShort8> packusdw(RValue<Int4> x, RValue<Int4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040069
Nicolas Capens157ba262019-12-10 17:49:14 -050070RValue<UShort4> psrlw(RValue<UShort4> x, unsigned char y);
71RValue<UShort8> psrlw(RValue<UShort8> x, unsigned char y);
72RValue<Short4> psraw(RValue<Short4> x, unsigned char y);
73RValue<Short8> psraw(RValue<Short8> x, unsigned char y);
74RValue<Short4> psllw(RValue<Short4> x, unsigned char y);
75RValue<Short8> psllw(RValue<Short8> x, unsigned char y);
76RValue<Int2> pslld(RValue<Int2> x, unsigned char y);
77RValue<Int4> pslld(RValue<Int4> x, unsigned char y);
78RValue<Int2> psrad(RValue<Int2> x, unsigned char y);
79RValue<Int4> psrad(RValue<Int4> x, unsigned char y);
80RValue<UInt2> psrld(RValue<UInt2> x, unsigned char y);
81RValue<UInt4> psrld(RValue<UInt4> x, unsigned char y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040082
Nicolas Capens157ba262019-12-10 17:49:14 -050083RValue<Int4> pmaxsd(RValue<Int4> x, RValue<Int4> y);
84RValue<Int4> pminsd(RValue<Int4> x, RValue<Int4> y);
85RValue<UInt4> pmaxud(RValue<UInt4> x, RValue<UInt4> y);
86RValue<UInt4> pminud(RValue<UInt4> x, RValue<UInt4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040087
Nicolas Capens157ba262019-12-10 17:49:14 -050088RValue<Short4> pmulhw(RValue<Short4> x, RValue<Short4> y);
89RValue<UShort4> pmulhuw(RValue<UShort4> x, RValue<UShort4> y);
90RValue<Int2> pmaddwd(RValue<Short4> x, RValue<Short4> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040091
Nicolas Capens157ba262019-12-10 17:49:14 -050092RValue<Short8> pmulhw(RValue<Short8> x, RValue<Short8> y);
93RValue<UShort8> pmulhuw(RValue<UShort8> x, RValue<UShort8> y);
94RValue<Int4> pmaddwd(RValue<Short8> x, RValue<Short8> y);
Nicolas Capens0bac2852016-05-07 06:09:58 -040095
Nicolas Capens157ba262019-12-10 17:49:14 -050096RValue<Int> movmskps(RValue<Float4> x);
97RValue<Int> pmovmskb(RValue<Byte8> x);
98
Nicolas Capens157ba262019-12-10 17:49:14 -050099} // namespace x86
100} // namespace rr
Nicolas Capensd022e412016-09-26 13:30:14 -0400101
Ben Clayton713b8d32019-12-17 20:37:56 +0000102#endif // rr_x86_hpp