16c9f99dfSJanosch Frank /* SPDX-License-Identifier: GPL-2.0-only */ 22d0d5f41SDavid Hildenbrand /* 32d0d5f41SDavid Hildenbrand * Copyright (c) 2018 Red Hat Inc 42d0d5f41SDavid Hildenbrand * 52d0d5f41SDavid Hildenbrand * Authors: 62d0d5f41SDavid Hildenbrand * David Hildenbrand <david@redhat.com> 72d0d5f41SDavid Hildenbrand */ 8*eb5a1bbaSCornelia Huck #ifndef _ASMS390X_FLOAT_H_ 9*eb5a1bbaSCornelia Huck #define _ASMS390X_FLOAT_H_ 102d0d5f41SDavid Hildenbrand 112d0d5f41SDavid Hildenbrand static inline void set_fpc(uint32_t fpc) 122d0d5f41SDavid Hildenbrand { 132d0d5f41SDavid Hildenbrand asm volatile(" lfpc %0\n" : : "m"(fpc) ); 142d0d5f41SDavid Hildenbrand } 152d0d5f41SDavid Hildenbrand 162d0d5f41SDavid Hildenbrand static inline uint32_t get_fpc(void) 172d0d5f41SDavid Hildenbrand { 182d0d5f41SDavid Hildenbrand uint32_t fpc; 192d0d5f41SDavid Hildenbrand 202d0d5f41SDavid Hildenbrand asm volatile(" stfpc %0\n" : "=m"(fpc)); 212d0d5f41SDavid Hildenbrand 222d0d5f41SDavid Hildenbrand return fpc; 232d0d5f41SDavid Hildenbrand } 242d0d5f41SDavid Hildenbrand 25dfe993b0SThomas Huth static inline uint8_t get_fpc_dxc(void) 262d0d5f41SDavid Hildenbrand { 272d0d5f41SDavid Hildenbrand return get_fpc() >> 8; 282d0d5f41SDavid Hildenbrand } 292d0d5f41SDavid Hildenbrand 302d0d5f41SDavid Hildenbrand static inline void set_fpc_dxc(uint8_t dxc) 312d0d5f41SDavid Hildenbrand { 322d0d5f41SDavid Hildenbrand uint32_t fpc = get_fpc(); 332d0d5f41SDavid Hildenbrand 342d0d5f41SDavid Hildenbrand fpc = (fpc & ~0xff00) | ((uint32_t)dxc) << 8; 352d0d5f41SDavid Hildenbrand 362d0d5f41SDavid Hildenbrand set_fpc(fpc); 372d0d5f41SDavid Hildenbrand } 382d0d5f41SDavid Hildenbrand 392d0d5f41SDavid Hildenbrand static inline void afp_enable(void) 402d0d5f41SDavid Hildenbrand { 412d0d5f41SDavid Hildenbrand ctl_set_bit(0, 63 - 45); 422d0d5f41SDavid Hildenbrand } 432d0d5f41SDavid Hildenbrand 442d0d5f41SDavid Hildenbrand static inline void afp_disable(void) 452d0d5f41SDavid Hildenbrand { 462d0d5f41SDavid Hildenbrand ctl_clear_bit(0, 63 - 45); 472d0d5f41SDavid Hildenbrand } 482d0d5f41SDavid Hildenbrand 492d0d5f41SDavid Hildenbrand #endif 50