CANN/pto-isa标量算术操作
标量算术操作【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa本文档描述来自 MLIRarith方言的标量算术操作。重要PTO AS 仅支持 arith 方言的标量操作。不支持向量和张量操作。操作总数47注意操作arith.scaling_extf和arith.scaling_truncf未包含在内因为它们在 PTO AS 中不受支持。整数算术操作arith.addi - 整数加法描述整数加法可选溢出标志。语法%result arith.addi %lhs, %rhs : i32 %result arith.addi %lhs, %rhs overflownsw, nuw : i32示例// 标量加法 %a arith.addi %b, %c : i64arith.subi - 整数减法语法%result arith.subi %lhs, %rhs : i32示例// 标量减法 %a arith.subi %b, %c : i32arith.muli - 整数乘法语法%result arith.muli %lhs, %rhs : i32示例// 标量乘法 %a arith.muli %b, %c : i64arith.divsi - 有符号整数除法描述有符号整数除法向零舍入。语法%result arith.divsi %lhs, %rhs : i32示例// 标量有符号除法 %a arith.divsi %b, %c : i32arith.divui - 无符号整数除法语法%result arith.divui %lhs, %rhs : i32示例// 标量无符号除法 %a arith.divui %b, %c : i32arith.remsi - 有符号整数取余语法%result arith.remsi %lhs, %rhs : i32示例// 标量有符号取余 %a arith.remsi %b, %c : i32arith.remui - 无符号整数取余语法%result arith.remui %lhs, %rhs : i32示例// 标量无符号取余 %a arith.remui %b, %c : i32arith.ceildivsi - 向上取整除法有符号描述有符号整数除法向正无穷舍入。语法%result arith.ceildivsi %lhs, %rhs : i32示例// 标量向上取整除法 %a arith.ceildivsi %b, %c : i32arith.ceildivui - 向上取整除法无符号语法%result arith.ceildivui %lhs, %rhs : i32示例// 标量向上取整除法无符号 %a arith.ceildivui %b, %c : i32arith.floordivsi - 向下取整除法有符号描述有符号整数除法向负无穷舍入。语法%result arith.floordivsi %lhs, %rhs : i32示例// 标量向下取整除法 %a arith.floordivsi %b, %c : i32浮点算术操作arith.addf - 浮点加法语法%result arith.addf %lhs, %rhs : f32 %result arith.addf %lhs, %rhs fastmathfast : f32示例// 标量加法 %a arith.addf %b, %c : f64arith.subf - 浮点减法语法%result arith.subf %lhs, %rhs : f32示例// 标量减法 %a arith.subf %b, %c : f32arith.mulf - 浮点乘法语法%result arith.mulf %lhs, %rhs : f32示例// 标量乘法 %a arith.mulf %b, %c : f64arith.divf - 浮点除法语法%result arith.divf %lhs, %rhs : f32示例// 标量除法 %a arith.divf %b, %c : f32arith.remf - 浮点取余语法%result arith.remf %lhs, %rhs : f32示例// 标量取余 %a arith.remf %b, %c : f64arith.negf - 浮点取负语法%result arith.negf %operand : f32示例// 标量取负 %a arith.negf %b : f32位运算操作arith.andi - 按位与语法%result arith.andi %lhs, %rhs : i32示例// 标量按位与 %a arith.andi %b, %c : i32arith.ori - 按位或语法%result arith.ori %lhs, %rhs : i32示例// 标量按位或 %a arith.ori %b, %c : i64arith.xori - 按位异或语法%result arith.xori %lhs, %rhs : i32示例// 标量按位异或 %a arith.xori %b, %c : i32移位操作arith.shli - 左移语法%result arith.shli %lhs, %rhs : i32示例// 标量左移 %a arith.shli %b, %c : i32arith.shrsi - 算术右移有符号描述算术右移符号扩展。语法%result arith.shrsi %lhs, %rhs : i32示例// 标量算术右移 %a arith.shrsi %b, %c : i32arith.shrui - 逻辑右移无符号描述逻辑右移零扩展。语法%result arith.shrui %lhs, %rhs : i32示例// 标量逻辑右移 %a arith.shrui %b, %c : i32比较操作arith.cmpi - 整数比较描述使用指定谓词比较两个整数。语法%result arith.cmpi predicate, %lhs, %rhs : i32谓词有符号slt、sle、sgt、sge无符号ult、ule、ugt、uge相等性eq、ne示例// 标量比较 %cmp arith.cmpi slt, %a, %b : i32 %eq arith.cmpi eq, %x, %y : i64arith.cmpf - 浮点比较描述使用指定谓词比较两个浮点数。语法%result arith.cmpf predicate, %lhs, %rhs : f32谓词有序oeq、one、olt、ole、ogt、oge、ord无序ueq、une、ult、ule、ugt、uge、uno总是true、false示例// 标量比较 %cmp arith.cmpf olt, %a, %b : f32 %eq arith.cmpf oeq, %x, %y : f64最小/最大操作arith.minsi - 最小值有符号整数语法%result arith.minsi %lhs, %rhs : i32示例// 标量最小值 %min arith.minsi %a, %b : i32arith.minui - 最小值无符号整数语法%result arith.minui %lhs, %rhs : i32示例// 标量最小值无符号 %min arith.minui %a, %b : i32arith.maxsi - 最大值有符号整数语法%result arith.maxsi %lhs, %rhs : i32示例// 标量最大值 %max arith.maxsi %a, %b : i32arith.maxui - 最大值无符号整数语法%result arith.maxui %lhs, %rhs : i32示例// 标量最大值无符号 %max arith.maxui %a, %b : i32arith.minimumf - 最小值浮点传播 NaN语法%result arith.minimumf %lhs, %rhs : f32示例// 标量最小值传播 NaN %min arith.minimumf %a, %b : f32arith.maximumf - 最大值浮点传播 NaN语法%result arith.maximumf %lhs, %rhs : f32示例// 标量最大值传播 NaN %max arith.maximumf %a, %b : f32arith.minnumf - 最小值浮点忽略 NaN语法%result arith.minnumf %lhs, %rhs : f32示例// 标量最小值忽略 NaN %min arith.minnumf %a, %b : f64arith.maxnumf - 最大值浮点忽略 NaN语法%result arith.maxnumf %lhs, %rhs : f32示例// 标量最大值忽略 NaN %max arith.maxnumf %a, %b : f64类型转换操作arith.extsi - 符号扩展描述将整数符号扩展到更宽的类型。语法%result arith.extsi %in : i32 to i64示例// 标量符号扩展 %wide arith.extsi %narrow : i32 to i64arith.extui - 零扩展描述将整数零扩展到更宽的类型。语法%result arith.extui %in : i32 to i64示例// 标量零扩展 %wide arith.extui %narrow : i32 to i64arith.trunci - 截断整数描述将整数截断到更窄的类型。语法%result arith.trunci %in : i64 to i32示例// 标量截断 %narrow arith.trunci %wide : i64 to i32arith.extf - 扩展浮点描述将浮点数扩展到更宽的类型。语法%result arith.extf %in : f32 to f64示例// 标量浮点扩展 %double arith.extf %single : f32 to f64arith.truncf - 截断浮点描述将浮点数截断到更窄的类型。语法%result arith.truncf %in : f64 to f32示例// 标量浮点截断 %single arith.truncf %double : f64 to f32arith.sitofp - 有符号整数转浮点语法%result arith.sitofp %in : i32 to f32示例// 标量整数转浮点 %fp arith.sitofp %int : i32 to f32arith.uitofp - 无符号整数转浮点语法%result arith.uitofp %in : i32 to f32示例// 标量无符号整数转浮点 %fp arith.uitofp %uint : i32 to f32arith.fptosi - 浮点转有符号整数描述将浮点数转换为有符号整数向零舍入。语法%result arith.fptosi %in : f32 to i32示例// 标量浮点转整数 %int arith.fptosi %fp : f32 to i32arith.fptoui - 浮点转无符号整数语法%result arith.fptoui %in : f32 to i32示例// 标量浮点转无符号整数 %uint arith.fptoui %fp : f32 to i32arith.bitcast - 位转换描述将位重新解释为不同类型相同位宽。语法%result arith.bitcast %in : f32 to i32示例// 标量位转换 %bits arith.bitcast %fp : f32 to i32arith.index_cast - 索引转换有符号描述在index类型和整数类型之间转换符号扩展。语法%result arith.index_cast %in : i32 to index %result arith.index_cast %in : index to i64示例// 标量索引转换 %idx arith.index_cast %int : i32 to index %int arith.index_cast %idx : index to i64arith.index_castui - 索引转换无符号描述在index类型和整数类型之间转换零扩展。语法%result arith.index_castui %in : i32 to index示例// 标量索引转换无符号 %idx arith.index_castui %uint : i32 to index特殊操作arith.select - 条件选择语法%result arith.select %condition, %true_value, %false_value : i32示例// 标量选择 %result arith.select %cond, %a, %b : i32 %fp_result arith.select %cond, %x, %y : f32arith.constant - 常量值语法%result arith.constant value : type示例// 标量常量 %c0 arith.constant 0 : i32 %c1 arith.constant 1 : i64 %pi arith.constant 3.14159 : f32 %true arith.constant true扩展算术操作arith.addui_extended - 扩展无符号加法描述带溢出标志的无符号加法。语法%sum, %overflow arith.addui_extended %lhs, %rhs : i32, i1示例// 标量扩展加法 %sum, %overflow arith.addui_extended %a, %b : i32, i1arith.mulsi_extended - 扩展有符号乘法描述有符号乘法返回低位和高位。语法%low, %high arith.mulsi_extended %lhs, %rhs : i32示例// 标量扩展乘法 %low, %high arith.mulsi_extended %a, %b : i32arith.mului_extended - 扩展无符号乘法语法%low, %high arith.mului_extended %lhs, %rhs : i32示例// 标量扩展乘法无符号 %low, %high arith.mului_extended %a, %b : i32【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考