Implement aarch64 addp intrinsics · rust-lang/rust@88c2e78 (original) (raw)

`@@ -131,6 +131,55 @@ unsafe fn test_vpmax_f32() {

`

131

131

`assert_eq!(r, e);

`

132

132

`}

`

133

133

``

``

134

`+

#[cfg(target_arch = "aarch64")]

`

``

135

`+

unsafe fn test_vpadd_s16() {

`

``

136

`+

let a = i16x4::from([1, 2, 3, 4]);

`

``

137

`+

let b = i16x4::from([0, -1, -2, -3]);

`

``

138

`+

let r: i16x4 = transmute(vpadd_s16(transmute(a), transmute(b)));

`

``

139

`+

let e = i16x4::from([3, 7, -1, -5]);

`

``

140

`+

assert_eq!(r, e);

`

``

141

`+

}

`

``

142

`+

#[cfg(target_arch = "aarch64")]

`

``

143

`+

unsafe fn test_vpadd_s32() {

`

``

144

`+

let a = i32x2::from([1, 2]);

`

``

145

`+

let b = i32x2::from([0, -1]);

`

``

146

`+

let r: i32x2 = transmute(vpadd_s32(transmute(a), transmute(b)));

`

``

147

`+

let e = i32x2::from([3, -1]);

`

``

148

`+

assert_eq!(r, e);

`

``

149

`+

}

`

``

150

`+

#[cfg(target_arch = "aarch64")]

`

``

151

`+

unsafe fn test_vpadd_s8() {

`

``

152

`+

let a = i8x8::from([1, 2, 3, 4, 5, 6, 7, 8]);

`

``

153

`+

let b = i8x8::from([0, -1, -2, -3, -4, -5, -6, -7]);

`

``

154

`+

let r: i8x8 = transmute(vpadd_s8(transmute(a), transmute(b)));

`

``

155

`+

let e = i8x8::from([3, 7, 11, 15, -1, -5, -9, -13]);

`

``

156

`+

assert_eq!(r, e);

`

``

157

`+

}

`

``

158

`+

#[cfg(target_arch = "aarch64")]

`

``

159

`+

unsafe fn test_vpadd_u16() {

`

``

160

`+

let a = u16x4::from([1, 2, 3, 4]);

`

``

161

`+

let b = u16x4::from([30, 31, 32, 33]);

`

``

162

`+

let r: u16x4 = transmute(vpadd_u16(transmute(a), transmute(b)));

`

``

163

`+

let e = u16x4::from([3, 7, 61, 65]);

`

``

164

`+

assert_eq!(r, e);

`

``

165

`+

}

`

``

166

`+

#[cfg(target_arch = "aarch64")]

`

``

167

`+

unsafe fn test_vpadd_u32() {

`

``

168

`+

let a = u32x2::from([1, 2]);

`

``

169

`+

let b = u32x2::from([30, 31]);

`

``

170

`+

let r: u32x2 = transmute(vpadd_u32(transmute(a), transmute(b)));

`

``

171

`+

let e = u32x2::from([3, 61]);

`

``

172

`+

assert_eq!(r, e);

`

``

173

`+

}

`

``

174

`+

#[cfg(target_arch = "aarch64")]

`

``

175

`+

unsafe fn test_vpadd_u8() {

`

``

176

`+

let a = u8x8::from([1, 2, 3, 4, 5, 6, 7, 8]);

`

``

177

`+

let b = u8x8::from([30, 31, 32, 33, 34, 35, 36, 37]);

`

``

178

`+

let r: u8x8 = transmute(vpadd_u8(transmute(a), transmute(b)));

`

``

179

`+

let e = u8x8::from([3, 7, 11, 15, 61, 65, 69, 73]);

`

``

180

`+

assert_eq!(r, e);

`

``

181

`+

}

`

``

182

+

134

183

`#[cfg(target_arch = "aarch64")]

`

135

184

`fn main() {

`

136

185

`unsafe {

`

`@@ -148,6 +197,13 @@ fn main() {

`

148

197

`test_vpmax_u16();

`

149

198

`test_vpmax_u32();

`

150

199

`test_vpmax_f32();

`

``

200

+

``

201

`+

test_vpadd_s16();

`

``

202

`+

test_vpadd_s32();

`

``

203

`+

test_vpadd_s8();

`

``

204

`+

test_vpadd_u16();

`

``

205

`+

test_vpadd_u32();

`

``

206

`+

test_vpadd_u8();

`

151

207

`}

`

152

208

`}

`

153

209

``