Как использовать конец файла с s в Visual Studio C ++? - PullRequest
0 голосов
/ 09 декабря 2018

Я загружаю библиотеку из c ++, и когда я добавляю ее в свой проект, я замечаю два файла enter image description here

Похоже, AsmX8664.s - это файл библиотеки для заголовкафайл AsmX8664.hpp, но я не знаю, как добавить его в проект c ++. Я пытаюсь использовать linker-> Input для его добавления, и появляется сообщение об ошибке enter image description here

"неверный или поврежденный файл: невозможно прочитать при 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...