Я загружаю библиотеку из c ++, и когда я добавляю ее в свой проект, я замечаю два файла
Похоже, AsmX8664.s - это файл библиотеки для заголовкафайл AsmX8664.hpp, но я не знаю, как добавить его в проект c ++. Я пытаюсь использовать linker-> Input для его добавления, и появляется сообщение об ошибке
"неверный или поврежденный файл: невозможно прочитать при 0x21C9".Кто-нибудь знает, как обращаться с этим файлом?Вот как это выглядит внутри
AsmX8664.hpp
#pragma once
#include <cstdint>
extern "C" {
std::uint32_t asm_Uint256_add(std::uint32_t dest[8], const std::uint32_t src[8], std::uint32_t enable);
std::uint32_t asm_Uint256_subtract(std::uint32_t dest[8], const std::uint32_t src[8], std::uint32_t enable);
std::uint32_t asm_Uint256_shiftLeft1(std::uint32_t dest[8]);
void asm_Uint256_shiftRight1(std::uint32_t dest[8], std::uint32_t enable);
void asm_Uint256_replace(std::uint32_t dest[8], const std::uint32_t src[8], std::uint32_t enable);
void asm_Uint256_swap(std::uint32_t left[8], std::uint32_t right[8], std::uint32_t enable);
bool asm_Uint256_equalTo(const std::uint32_t left[8], const std::uint32_t right[8]);
bool asm_Uint256_lessThan(const std::uint32_t left[8], const std::uint32_t right[8]);
// Computes (uint512 z) = (uint256 x) * (uint256 y), correct for all input values.
// (i.e. Input values are Uint256, not necessarily FieldInt.)
void asm_FieldInt_multiply256x256eq512(std::uint32_t z[16], const std::uint32_t x[8], const std::uint32_t y[8]);
// Computes (uint768 dest) = (uint512 src) * (2^256 + 2^32 + 0x3D1) % 2^768,
// correct for all input values. If src < modulus^2, then the result does not overflow.
void asm_FieldInt_multiplyBarrettStep0(std::uint32_t dest[24], const std::uint32_t src[16]);
// Computes (uint512 dest) = (uint256 src) * (2^256 - 2^32 - 0x3D1), correct for all input values.
void asm_FieldInt_multiplyBarrettStep1(std::uint32_t dest[16], const std::uint32_t src[8]);
// Computes (uint288 z) = ((uint512 x) - (uint512 y)) % 2^288, correct for all input values.
void asm_FieldInt_multiplyBarrettStep2(std::uint32_t z[9], const std::uint32_t x[16], const std::uint32_t y[16]);
}
AsmX8664.s
/* uint32_t asm_Uint256_add(uint32_t dest[8], const uint32_t src[8], uint32_t enable) */
.globl asm_Uint256_add
asm_Uint256_add:
negq %rdx
movq 0(%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
addq %rax, 0(%rdi)
adcq %rcx, 8(%rdi)
adcq %r8 , 16(%rdi)
adcq %r9 , 24(%rdi)
setc %al
movzbl %al, %eax
retq
/* uint32_t asm_Uint256_subtract(uint32_t dest[8], const uint32_t src[8], uint32_t enable) */
.globl asm_Uint256_subtract
asm_Uint256_subtract:
negq %rdx
movq 0(%rsi), %rax
movq 8(%rsi), %rcx
movq 16(%rsi), %r8
movq 24(%rsi), %r9
andq %rdx, %rax
andq %rdx, %rcx
andq %rdx, %r8
andq %rdx, %r9
subq %rax, 0(%rdi)
sbbq %rcx, 8(%rdi)
sbbq %r8 , 16(%rdi)
sbbq %r9 , 24(%rdi)
setc %al
movzbl %al, %eax
retq