Add unsigned saturating add/sub intrinsics for aarch64 · rust-lang/rust@70a6abf (original) (raw)

`@@ -180,6 +180,24 @@ unsafe fn test_vpadd_u8() {

`

180

180

`assert_eq!(r, e);

`

181

181

`}

`

182

182

``

``

183

`+

#[cfg(target_arch = "aarch64")]

`

``

184

`+

unsafe fn test_vqsub_u8() {

`

``

185

`+

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

`

``

186

`+

let b = u8x8::from([30, 1, 1, 1, 34, 0xff, 36, 37]);

`

``

187

`+

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

`

``

188

`+

let e = u8x8::from([0, 1, 2, 3, 0, 0, 0, 218]);

`

``

189

`+

assert_eq!(r, e);

`

``

190

`+

}

`

``

191

+

``

192

`+

#[cfg(target_arch = "aarch64")]

`

``

193

`+

unsafe fn test_vqadd_u8() {

`

``

194

`+

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

`

``

195

`+

let b = u8x8::from([30, 1, 1, 1, 34, 0xff, 36, 37]);

`

``

196

`+

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

`

``

197

`+

let e = u8x8::from([31, 3, 4, 5, 39, 0xff, 43, 0xff]);

`

``

198

`+

assert_eq!(r, e);

`

``

199

`+

}

`

``

200

+

183

201

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

`

184

202

`fn main() {

`

185

203

`unsafe {

`

`@@ -204,6 +222,9 @@ fn main() {

`

204

222

`test_vpadd_u16();

`

205

223

`test_vpadd_u32();

`

206

224

`test_vpadd_u8();

`

``

225

+

``

226

`+

test_vqsub_u8();

`

``

227

`+

test_vqadd_u8();

`

207

228

`}

`

208

229

`}

`

209

230

``