sysdep.c revision 332154
1/*******************************************************************
2** s y s d e p . c
3** Forth Inspired Command Language
4** Author: John Sadler (john_sadler@alum.mit.edu)
5** Created: 16 Oct 1997
6** Implementations of FICL external interface functions...
7**
8*******************************************************************/
9
10/* $FreeBSD: stable/11/stand/ficl/aarch64/sysdep.c 332154 2018-04-06 21:37:25Z kevans $ */
11
12#ifdef TESTMAIN
13#include <stdio.h>
14#include <stdlib.h>
15#else
16#include <stand.h>
17#endif
18#include "ficl.h"
19
20/*
21*******************  FreeBSD  P O R T   B E G I N S   H E R E ******************** Michael Smith
22*/
23
24#if PORTABLE_LONGMULDIV == 0
25DPUNS ficlLongMul(FICL_UNS x, FICL_UNS y)
26{
27    DPUNS q;
28    uint64_t qx;
29
30    qx = (uint64_t)x * (uint64_t) y;
31
32    q.hi = (uint32_t)( qx >> 32 );
33    q.lo = (uint32_t)( qx & 0xFFFFFFFFL);
34
35    return q;
36}
37
38UNSQR ficlLongDiv(DPUNS q, FICL_UNS y)
39{
40    UNSQR result;
41    uint64_t qx, qh;
42
43    qh = q.hi;
44    qx = (qh << 32) | q.lo;
45
46    result.quot = qx / y;
47    result.rem  = qx % y;
48
49    return result;
50}
51#endif
52
53void  ficlTextOut(FICL_VM *pVM, char *msg, int fNewline)
54{
55    IGNORE(pVM);
56
57    while(*msg != 0)
58	putchar(*(msg++));
59    if (fNewline)
60	putchar('\n');
61
62   return;
63}
64
65void *ficlMalloc (size_t size)
66{
67    return malloc(size);
68}
69
70void *ficlRealloc (void *p, size_t size)
71{
72    return realloc(p, size);
73}
74
75void  ficlFree   (void *p)
76{
77    free(p);
78}
79
80
81/*
82** Stub function for dictionary access control - does nothing
83** by default, user can redefine to guarantee exclusive dict
84** access to a single thread for updates. All dict update code
85** is guaranteed to be bracketed as follows:
86** ficlLockDictionary(TRUE);
87** <code that updates dictionary>
88** ficlLockDictionary(FALSE);
89**
90** Returns zero if successful, nonzero if unable to acquire lock
91** befor timeout (optional - could also block forever)
92*/
93#if FICL_MULTITHREAD
94int ficlLockDictionary(short fLock)
95{
96	IGNORE(fLock);
97	return 0;
98}
99#endif /* FICL_MULTITHREAD */
100