Imported Upstream version 3.0
[platform/upstream/gnu-efi.git] / lib / runtime / efirtlib.c
1 /*++
2
3 Copyright (c) 1999  Intel Corporation
4
5 Module Name:
6
7     EfiRtLib.h
8
9 Abstract:
10
11     EFI Runtime library functions
12
13
14
15 Revision History
16
17 --*/
18
19 #include "efi.h"
20 #include "efilib.h"
21 #include "efirtlib.h"
22
23 #ifndef __GNUC__
24 #pragma RUNTIME_CODE(RtZeroMem)
25 #endif
26 VOID
27 RUNTIMEFUNCTION
28 RtZeroMem (
29     IN VOID     *Buffer,
30     IN UINTN     Size
31     )
32 {
33     INT8        *pt;
34
35     pt = Buffer;
36     while (Size--) {
37         *(pt++) = 0;
38     }
39 }
40
41 #ifndef __GNUC__
42 #pragma RUNTIME_CODE(RtSetMem)
43 #endif
44 VOID
45 RUNTIMEFUNCTION
46 RtSetMem (
47     IN VOID     *Buffer,
48     IN UINTN    Size,
49     IN UINT8    Value    
50     )
51 {
52     INT8        *pt;
53
54     pt = Buffer;
55     while (Size--) {
56         *(pt++) = Value;
57     }
58 }
59
60 #ifndef __GNUC__
61 #pragma RUNTIME_CODE(RtCopyMem)
62 #endif
63 VOID
64 RUNTIMEFUNCTION
65 RtCopyMem (
66     IN VOID     *Dest,
67     IN VOID     *Src,
68     IN UINTN    len
69     )
70 {
71     CHAR8    *d, *s;
72
73     d = Dest;
74     s = Src;
75     while (len--) {
76         *(d++) = *(s++);
77     }
78 }
79
80 #ifndef __GNUC__
81 #pragma RUNTIME_CODE(RtCompareMem)
82 #endif
83 INTN
84 RUNTIMEFUNCTION
85 RtCompareMem (
86     IN VOID     *Dest,
87     IN VOID     *Src,
88     IN UINTN    len
89     )
90 {
91     CHAR8    *d, *s;
92
93     d = Dest;
94     s = Src;
95     while (len--) {
96         if (*d != *s) {
97             return *d - *s;
98         }
99
100         d += 1;
101         s += 1;
102     }
103
104     return 0;
105 }
106
107 #ifndef __GNUC__
108 #pragma RUNTIME_CODE(RtCompareGuid)
109 #endif
110 INTN
111 RUNTIMEFUNCTION
112 RtCompareGuid (
113     IN EFI_GUID     *Guid1,
114     IN EFI_GUID     *Guid2
115     )
116 /*++
117
118 Routine Description:
119
120     Compares to GUIDs
121
122 Arguments:
123
124     Guid1       - guid to compare
125     Guid2       - guid to compare
126
127 Returns:
128     = 0     if Guid1 == Guid2
129
130 --*/
131 {
132     INT32       *g1, *g2, r;
133
134     //
135     // Compare 32 bits at a time
136     //
137
138     g1 = (INT32 *) Guid1;
139     g2 = (INT32 *) Guid2;
140
141     r  = g1[0] - g2[0];
142     r |= g1[1] - g2[1];
143     r |= g1[2] - g2[2];
144     r |= g1[3] - g2[3];
145
146     return r;
147 }
148
149