| // SPDX-License-Identifier: BSD-2-Clause |
| /* |
| * Copyright (c) 2014, STMicroelectronics International N.V. |
| */ |
| #include "mpa.h" |
| |
| /*------------------------------------------------------------ |
| * |
| * mpa_set_S32 |
| * |
| */ |
| void mpa_set_S32(mpanum dest, int32_t short_val) |
| { |
| #if (MPA_WORD_SIZE == 32) |
| if (short_val != 0) |
| dest->size = (short_val < 0) ? -1 : 1; |
| else |
| dest->size = 0; |
| dest->d[0] = (short_val < 0) ? -short_val : short_val; |
| #else |
| #error "Write code for digit size != 32" |
| #endif |
| } |
| |
| /*------------------------------------------------------------ |
| * |
| * mpa_get_S32 |
| * |
| * Returns zero if the src fits within an int32_t |
| * otherwise it returns non-zero and the dest value is undefined. |
| */ |
| int32_t mpa_get_S32(int32_t *dest, mpanum src) |
| { |
| #if (MPA_WORD_SIZE == 32) |
| if (__mpanum_size(src) > 1) |
| return -1; |
| if (__mpanum_lsw(src) > INT32_MIN && __mpanum_sign(src) == MPA_NEG_SIGN) |
| return -1; |
| if (__mpanum_lsw(src) > INT32_MAX && __mpanum_sign(src) == MPA_POS_SIGN) |
| return -1; |
| |
| *dest = __mpanum_get_word(0, src) * __mpanum_sign(src); |
| return 0; |
| |
| #else |
| #error "Write code for digit size != 32" |
| #endif |
| } |
| |
| /*------------------------------------------------------------ |
| * |
| * mpa_set_word |
| * |
| */ |
| void mpa_set_word(mpanum dest, mpa_word_t src) |
| { |
| dest->d[0] = src; |
| dest->size = (src == 0) ? 0 : 1; |
| } |
| |
| /*------------------------------------------------------------ |
| * |
| * mpa_get_word |
| * |
| * Returns the absolute value of the least significant word of src |
| */ |
| mpa_word_t mpa_get_word(mpanum src) |
| { |
| return __mpanum_get_word(0, src); |
| } |