F16C

F16C (以前/非公式にCVT16として知られていた) 命令セットは、半精度とIEEE標準の単精度浮動小数点形式の間の変換のサポートを提供するx86 拡張である。

 歴史 
CVT16命令セット(2009年5月1日にAMDによって発表された)はx86およびAMD64命令セットにおける128ビットSSE中核命令の拡張である。

CVT16は、2007年8月30日に発表された命令セット提案の一部を改訂したもので、および命令セットによって補完される。このリビジョンにより、提案された新しい命令のバイナリ・コーディングはIntelのAVX命令拡張との互換性が高まったが、ただし命令の機能は変更されていない。

最近の文書では、F16Cという名前がIntelとAMDのx86-64アーキテクチャ仕様の両方で正式に使用されている。

 テクニカル情報 
XMMレジスタ内の4つの浮動小数点値、またはYMMレジスタ内の8つの浮動小数点値を変換するバリアントがある。

この命令は「半(精度)詰めから単(精度)詰めへのベクトル変換(※原文: Vector Convert Packed Half to Packed Single)」の略語で、その逆も然りである:

 VCVTPH2PS xmmreg,xmmrm64 メモリまたはXMMレジスタの下半分の内の4つの半精度浮動小数点値を、XMMレジスタ内に4つの単精度浮動小数点値として変換する。
 VCVTPH2PS ymmreg,xmmrm128 メモリまたはXMMレジスタ (YMMレジスタの下半分) 内の8つの半精度浮動小数点値を、YMMレジスタ内に8つの単精度浮動小数点値として変換する。
 VCVTPS2PH xmmrm64,xmmreg,imm8 XMMレジスタ内の4つの単精度浮動小数点値を、メモリまたはXMMレジスタの下半分内に半精度浮動小数点値として変換する。
 VCVTPS2PH xmmrm128,ymmreg,imm8 YMMレジスタ内の8つの単精度浮動小数点値を、メモリまたはXMMレジスタ内に半精度浮動小数点値として変換する。

VCVTPS2PHへの8ビットの直接引数は、丸めモードを選択する。値0～4は、最近接、ダウン、アップ、トランケート、およびMXCSR.RCでモード設定をする。

これらの命令のサポートは、CPUIDのEAX=1の後にECXのビット29によって示される。

 F16C搭載CPU 

 AMD:
 Jaguar=ベース・プロセッサ
 Puma=ベース・プロセッサ
 「重機」(系)・プロセッサ
 Bulldozer=ベース・プロセッサ, Q4 2011
 Piledriver=ベース・プロセッサ, Q4 2012
 Steamroller=ベース・プロセッサ, Q1 2014
 Excavator=ベース・プロセッサ, Q2 2015
 ・プロセッサ, Q1 2017, およびこれ以降
 Intel:
 Ivy Bridge・プロセッサおよびこれ以降

 リファレンス 

 外部リンク 

 New Bulldozer and Piledriver Instructions 
 DirectX math F16C and FMA  
 AMD64 Architecture Programmer's Manual Volume 1 
 AMD64 Architecture Programmer's Manual Volume 2 
 AMD64 Architecture Programmer's Manual Volume 3 
 AMD64 Architecture Programmer's Manual Volume 4 
 AMD64 Architecture Programmer's Manual Volume 5 
 IA32 Architectures Software Developer Manual 

*
Category:命令セットアーキテクチャ
Category:AMDのマイクロプロセッサ