> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tecnologia de compilador do Xbox

> Tecnologia de compilador do XBOX

O compilador para XBOX é o compilador Visual C++ x64 fornecido com o Visual Studio. Use o Visual Studio 2022 (17.12 ou 17.14) ou a atualização mais recente do Visual Studio 2026.

O desenvolvimento para XBOX também dá suporte ao clang/LLVM para Windows v11 ou posterior. Esse conjunto de ferramentas usa o Visual C/C++ Runtime. Se você usar o MSBuild, use a integração do clang/LLVM do Visual Studio 2019 ou do Visual Studio 2022.

Outras combinações de conjunto de ferramentas e tempo de execução podem não funcionar ou não passar na certificação.

Para obter detalhes sobre como atualizar código Visual C++, veja [Visual C++ Porting and Upgrading Guide](https://learn.microsoft.com/cpp/porting/visual-cpp-porting-and-upgrading-guide).

> [!NOTE]
>
> As ferramentas do XBOX só funcionam com arquivos Microsoft Program Database (PDB) para símbolos de depuração. Elas não dão suporte às informações de depuração CodeView ou DWARF emitidas pelos arquivos `.ld` do LLVM.

## Versões e recursos das linguagens C++14, C++17 e C++20

O Visual Studio 2019, o Visual Studio 2022 e o Visual Studio 2026 dão suporte a C++11, C++14 e C++17. O Visual Studio 2022 e o Visual Studio 2026 também dão suporte a C++20.

| Versão do compilador | Macro de versão | Lançamento | Observações |
| - | - | - | - |
| 19.20 | \_MSC\_VER == 1920 | Visual Studio 2019 (versão 16.0) | [C++17/20 Features and Fixes in Visual Studio 2019](https://devblogs.microsoft.com/cppblog/cpp17-20-features-and-fixes-in-vs-2019/) |
| 19.21 | \_MSC\_VER == 1921 | Visual Studio 2019 (versão 16.1) | |
| 19.22 | \_MSC\_VER == 1922 | Visual Studio 2019 (versão 16.2) | |
| 19.23 | \_MSC\_VER == 1923 | Visual Studio 2019 (versão 16.3) | |
| 19.24 | \_MSC\_VER == 1924 | Visual Studio 2019 (versão 16.4) | |
| 19.25 | \_MSC\_VER == 1925 | Visual Studio 2019 (versão 16.5) | [C++20 Modules](https://devblogs.microsoft.com/cppblog/c-modules-conformance-improvements-with-msvc-in-visual-studio-2019-16-5/) |
| 19.26 | \_MSC\_VER == 1926 | Visual Studio 2019 (versão 16.6) | [C++20 Features and Fixes in VS 2019 16.1 through 16.6](https://devblogs.microsoft.com/cppblog/c20-features-and-fixes-in-vs-2019-16-1-through-16-6/) |
| 19.27 | \_MSC\_VER == 1927 | Visual Studio 2019 (versão 16.7) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-167) |
| 19.28 | \_MSC\_VER == 1928 | Visual Studio 2019 (versão 16.8) | [C++20 Modules](https://devblogs.microsoft.com/cppblog/standard-c20-modules-support-with-msvc-in-visual-studio-2019-version-16-8/)  [C++20 Coroutines](https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/)  [C++20 Language Features](https://devblogs.microsoft.com/cppblog/c20-features-in-visual-studio-2019-versions-16-7-and-16-8/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-168) |
| 19.28.29910 ou posterior | | Visual Studio 2019 (versão 16.9) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-169) |
| 19.29 | \_MSC\_VER = 1929 | Visual Studio 2019 (versão 16.10) | [C++20 Ranges](https://devblogs.microsoft.com/cppblog/c20-ranges-are-complete-in-visual-studio-2019-version-16-10/)  [\<format>](https://devblogs.microsoft.com/cppblog/format-in-visual-studio-2019-version-16-10/)  [extensions to \<chrono>](https://devblogs.microsoft.com/cppblog/cpp20s-extensions-to-chrono-available-in-visual-studio-2019-version-16-10/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-1610) |
| 19.29.30133.0 ou posterior | | Visual Studio 2019 (versão 16.11) | [C++20 Coroutines](https://devblogs.microsoft.com/cppblog/cpp20-coroutine-improvements-in-visual-studio-2019-version-16-11/)  [STL Change Notes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-161114)  [/std:c++20 switch](https://devblogs.microsoft.com/cppblog/msvc-cpp20-and-the-std-cpp20-switch/) |
| 19.30 | \_MSC\_VER == 1930 | Visual Studio 2022 (17.0) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-170) |
| 19.31 | \_MSC\_VER == 1931 | Visual Studio 2022 (17.1) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) |
| 19.32 | \_MSC\_VER == 1932 | Visual Studio 2022 (17.2) | [MSVC's STL Completes /std:c++20](https://devblogs.microsoft.com/cppblog/msvcs-stl-completes-stdc20/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) |
| 19.33 | \_MSC\_VER = 1933 | Visual Studio 2022 (17.3) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) |
| 19.34 | \_MSC\_VER = 1934 | Visual Studio 2022 (17.4) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) |
| 19.35 | \_MSC\_VER = 1935 | Visual Studio 2022 (17.5) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) |
| 19.36 | \_MSC\_VER = 1936 | Visual Studio 2022 (17.6) | [vcpkg](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) |
| 19.37 | \_MSC\_VER = 1937 | Visual Studio 2022 (17.7) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) |
| 19.38 | \_MSC\_VER = 1938 | Visual Studio 2022 (17.8) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-178) |
| 19.39 | \_MSC\_VER = 1939 | Visual Studio 2022 (17.9) | [MSVC Backend Updates](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-179) |
| 19.40 | \_MSC\_VER = 1940 | Visual Studio 2022 (17.10) | [MSVC Toolset Minor Version](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) |
| 19.41 | \_MSC\_VER = 1941 | Visual Studio 2022 (17.11) | [Diagnostics changes](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-11/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) |
| 19.42 | \_MSC\_VER = 1942 | Visual Studio 2022 (17.12) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1712) |
| 19.43 | \_MSC\_VER = 1943 | Visual Studio 2022 (17.13) | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/msvc-compiler-updates-in-visual-studio-2022-version-17-13/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1713) |
| 19.44 | \_MSC\_VER = 1944 | Visual Studio 2022 (17.14) | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-in-visual-studio-2022-17-14/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1714) |
| 19.50 | \_MSC\_VER = 1950 | Visual Studio 2026 | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-build-tools-v14-50/)  [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#msvc-build-tools-1450) |

## Intrínsecos

O compilador Visual C++ não dá suporte a assembly embutido x64, mas dá suporte a uma grande variedade de intrínsecos para permitir a inclusão de conjuntos de instruções especializados no desenvolvimento para XBOX.

> [!NOTE]
>
> Qualquer uso de intrínsecos pressupõe que você já verificou se a plataforma de destino dá suporte às instruções. Se você não verificar o suporte, o aplicativo lançará exceções `invalid instruction` em tempo de execução. Preste atenção especial ao fato de que o XBOX One (CPU AMD Jaguar) dá suporte a AVX e F16C, e o XBOX Series X|S (CPU AMD Hercules) também dá suporte a AVX2 e FMA3. Nenhuma das plataformas dá suporte a instruções AVX-512 ou posteriores.

| Cabeçalho | Descrição |
| - | - |
| intrin.h | Intrínsecos gerais, em especial `__cpuid` e várias formas intrínsecas das rotinas do CRT. Inclui ammintrin.h e immintrin.h |
| ammintrin.h | Conjuntos de instruções AMD: intrínsecos SSE5, FMA4 e XOP.   *FMA4 e XOP não têm suporte no XBOX One (CPU AMD Jaguar) nem no XBOX Series X\|S (CPU AMD Hercules)*. |
| immintrin.h | Conjuntos de instruções Intel: intrínsecos [AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions), AVX2, [BMI, BMI2](https://en.wikipedia.org/wiki/Bit_manipulation_instruction_set), [FMA3](https://en.wikipedia.org/wiki/FMA_instruction_set), e [F16C/CVT16](https://en.wikipedia.org/wiki/F16C).   *AVX2, BMI2 e FMA3 têm suporte no XBOX Series X\|S (CPU AMD Hercules), mas não no XBOX One (CPU AMD Jaguar)*. |
| xmmintrin.h | Intrínsecos [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) e o tipo `__m128` (SIMD de ponto flutuante de precisão simples). |
| emmintrin.h | Intrínsecos [SSE2](https://en.wikipedia.org/wiki/SSE2) e os tipos `__m128i` / `__m128d` (SIMD de ponto flutuante de precisão dupla e de inteiros). |
| pmmintrin.h | Intrínsecos [SSE3](https://en.wikipedia.org/wiki/SSE3) (operações horizontais de adição e subtração float/double, operações "dup" específicas). |
| tmmintrin.h | Intrínsecos [SSSE3](https://en.wikipedia.org/wiki/SSSE3) (mais operações horizontais, abs de inteiros, embaralhamento de "byte" para complementar o SSE2). |
| smmintrin.h | Intrínsecos [SSE4.1](https://en.wikipedia.org/wiki/SSE4) (produto escalar, arredondamento, suporte ampliado a min/max para SSE2). |
| nmmintrin.h | Intrínsecos SSE4.2. |
| wmmintrin.h | Intrínsecos AES. |
| zmmintrin.h | Intrínsecos AVX-512.   *Os intrínsecos AVX-512 não têm suporte no XBOX One (CPU AMD Jaguar) nem no XBOX Series X\|S (CPU AMD Hercules)*. |
| mmintrin.h | Intrínsecos Intel MMX (incluindo o tipo `__m64`), que não têm suporte em aplicativos nativos x64. |
| mm3dnow\.h | Intrínsecos AMD 3DNow!, que não têm suporte em aplicativos nativos x64. *`_mm_prefetch` / `_m_prefetchw` têm suporte no nativo x64 e também são definidos em intrin.h.* |

> [!NOTE]
>
> O Visual Studio dá suporte às opções **/arch:AVX** e **/arch:AVX2**, que habilitam o uso do [prefixo VEX](https://en.wikipedia.org/wiki/VEX_prefix) que faz parte do padrão do conjunto de instruções AVX. Use essa opção em todos os aplicativos XBOX. Para obter mais informações, veja os artigos a seguir.

* [Microsoft Docs: x64 Intrinsics](https://learn.microsoft.com/cpp/intrinsics/x64-amd64-intrinsics-list)

* [Intel: AVX](https://go.microsoft.com/fwlink/p/?LinkId=251202)

* [Games for Windows and the DirectX SDK blog: DirectXMath series](https://walbourn.github.io/directxmath-sse-sse2-and-arm-neon/)

### Intrínsecos do clang/LLVM

O conjunto de ferramentas clang/LLVM para Windows implementa muitos dos mesmos intrínsecos que o MSVC, mas existem algumas diferenças importantes:

* O clang/LLVM e o GNUC tratam os tipos SIMD SSE de forma diferente do Visual C++ e do Intel Compiler. Especificamente, os tipos `__m128`, `__m128i` e `__m128d` são tipos opacos, e não structs, portanto você não pode criar funções C++ sobrecarregadas que usem esses tipos. Essa diferença também significa que o acesso direto a elementos por meio de `__m128.m128_f32[0]` não é compilado no clang/LLVM.

> Por esse motivo, o DirectXMath define `_XM_NO_XMVECTOR_OVERLOADS_` ao compilar usando o clang/LLVM. Para melhor portabilidade, você pode definir essa macro explicitamente no seu código para aplicá-la também ao MSVC.

* Os intrínsecos *cpuid* do clang/LLVM usam um cabeçalho especial, `#include <cpuid.h>`. O intrínseco `__cpuid` usa uma lista de parâmetros diferente, e `__cpuid_count` é o equivalente ao `__cpuidex` do MSVC, mas, novamente, com uma lista de parâmetros diferente.

```
#if (defined(__clang__) || defined(__GNUC__)) && (__x86_64__ || __i386__)
#include <cpuid.h>
#else
#include <intrin.h>
#endif
```

```
int CPUInfo[4] = { -1 };
#if defined(__clang__) || defined(__GNUC__)
__cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
#else
__cpuid(CPUInfo, 0);
#endif
```

```
#if defined(__clang__) || defined(__GNUC__)
__cpuid_count(7, 0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
#else
__cpuidex(CPUInfo, 7, 0);
#endif
```

## Convenções de chamada

A convenção de chamada padrão para código nativo x64 é `__fastcall`, detalhada no [Microsoft Docs](https://learn.microsoft.com/cpp/build/x64-calling-convention). As convenções de chamada `__cdecl` e `__stdcall` são apenas aliases de `__fastcall` no x64.

Os compiladores MSVC e clang/LLVM incluem suporte à convenção de chamada `__vectorcall` para código x86 e x64. Para obter mais informações, veja
[Visual C++ Team Blog: Introducing 'Vector Calling Convention'](https://devblogs.microsoft.com/cppblog/introducing-vector-calling-convention/) e o [Microsoft Docs](https://learn.microsoft.com/cpp/cpp/vectorcall).

## Autovetorizador e autoparalelizador

O otimizador do Visual C++ pode transformar cálculos escalares de inteiros ou de ponto flutuante em instruções SIMD por meio do autovetorizador. O autovetorizador é habilitado automaticamente com `/O2` ou `/Ox`. Você pode desabilitá-lo para loops específicos usando `#pragma loop(no_vector)`.

Esses conjuntos de ferramentas de compilador também dão suporte à autoparalelização de loops usando threads. Habilite a autoparalelização usando `/Qpar`. Você pode fornecer uma dica para um loop específico usando `#pragma (loop(hint_parallel(n)))`. Para obter mais informações, veja o artigo a seguir.

* [Auto-Parallelization and Auto-Vectorization](https://learn.microsoft.com/cpp/parallel/auto-parallelization-and-auto-vectorization)

## Relatar bugs

Relate bugs do **compilador Visual C++** (se possível) por meio de *Report a Problem...* do Visual Studio. Veja o [Microsoft Docs](https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio) e o site da [Developer Community](https://aka.ms/feedback/report?space=62). Para obter detalhes sobre como criar um bom relatório de bug para o compilador, veja [esta página](https://aka.ms/compilerbug).

> [!NOTE]
>
> Se forem necessárias mais informações sob NDA para reproduzir o problema, você pode adicionar um comentário marcado como "Microsoft only" a um relatório público de problema.

Para relatar bugs do **compilador clang/LLVM para Windows**, use [https://bugs.llvm.org/](https://bugs.llvm.org/)

Para relatar bugs da **Microsoft Standard C++ Library** (também conhecida como STL), use [https://github.com/microsoft/STL/issues](https://github.com/microsoft/STL/issues)

Como sempre, fique à vontade para entrar em contato com seu *Account Manager* sobre problemas críticos que precisem ser escalonados.

## Recursos

* [AMD Developer Guides & Manuals](https://developer.amd.com/resources/developer-guides-manuals/)

* [Intel 64 and IA-32 Architectures Software Developer Manuals](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)

* [What's New for Visual C++ in Visual Studio](https://learn.microsoft.com/cpp/what-s-new-for-visual-cpp-in-visual-studio)


## Related topics

- [Visual Studio para desenvolvimento para console](/pt-BR/tools/tools-console/visualstudio/visualstudio.md)
- [Visualstudio](/pt-BR/tools/tools-console/visualstudio/index.md)
- [Recomendações de opções do compilador e do vinculador do Visual C++](/pt-BR/tools/tools-console/visualstudio/compiler-switch-recommendations.md)
- [Compilador de sombreadores HLSL (DXC) para o XBOX GDK](/pt-BR/tools/tools-console/shadercompiler/index.md)
- [Diretriz de acessibilidade do Xbox 114](/pt-BR/build/game-principles/accessibility/xag-deep-dives/xag-114-ui-context.md)
