Coverage Report

Created: 2025-06-24 07:01

/src/ghostpdl/base/gsroprun24.h
Line
Count
Source (jump to first uncovered line)
1
/* Copyright (C) 2001-2023 Artifex Software, Inc.
2
   All Rights Reserved.
3
4
   This software is provided AS-IS with no warranty, either express or
5
   implied.
6
7
   This software is distributed under license and may not be copied,
8
   modified or distributed except as expressly authorized under the terms
9
   of the license contained in the file LICENSE in this distribution.
10
11
   Refer to licensing information at http://www.artifex.com or contact
12
   Artifex Software, Inc.,  39 Mesa Street, Suite 108A, San Francisco,
13
   CA 94129, USA, for further information.
14
*/
15
16
17
/* This file is repeatedly included by gsroprun.c to 'autogenerate' many
18
 * different versions of roprun code. DO NOT USE THIS FILE EXCEPT FROM
19
 * gsroprun.c.
20
 */
21
22
/* Set the following defines as appropriate on entry:
23
 *   TEMPLATE_NAME (Compulsory)  The name of the function to generate
24
 *   SPECIFIC_ROP  (Optional)    If set, the function will base its decision
25
 *                               about whether to provide S and T upon
26
 *                               this value.
27
 *   SPECIFIC_CODE (Optional)    If set, this should expand out to code to
28
 *                               perform the rop. Will be invoked as:
29
 *                               SPECIFIC_ROP(OUT,D,S,T)
30
 *   S_CONST       (Optional)    If set, S will be taken to be constant, else
31
 *                               S will be read from a pointer.
32
 *   T_CONST       (Optional)    If set, T will be taken to be constant, else
33
 *                               T will be read from a pointer.
34
 *   S_1BIT        (Optional)    If set, the code will cope with S maybe
35
 *                               being a pointer to a 1 bit bitmap to choose
36
 *                               between scolors[0] and [1]. If set to 1, the
37
 *                               code will assume that this is the case.
38
 *   T_1BIT        (Optional)    If set, the code will cope with T maybe
39
 *                               being a pointer to a 1 bit bitmap to choose
40
 *                               between scolors[0] and [1]. If set to 1, the
41
 *                               code will assume that this is the case.
42
 */
43
44
#if defined(TEMPLATE_NAME)
45
46
#ifdef SPECIFIC_ROP
47
#if rop3_uses_S(SPECIFIC_ROP)
48
#define S_USED
49
#endif
50
#if rop3_uses_T(SPECIFIC_ROP)
51
#define T_USED
52
#endif
53
#else /* !SPECIFIC_ROP */
54
#define S_USED
55
#define T_USED
56
#endif /* SPECIFIC_ROP */
57
58
#ifndef S_USED
59
#undef S_1BIT
60
#endif /* defined(S_USED) */
61
#ifndef T_USED
62
#undef T_1BIT
63
#endif /* defined(T_USED) */
64
65
#define GET24(ptr)\
66
0
  (((rop_operand)(ptr)[0] << 16) | ((rop_operand)(ptr)[1] << 8) | (ptr)[2])
67
#define PUT24(ptr, pixel)\
68
0
  (ptr)[0] = (byte)((pixel) >> 16),\
69
0
  (ptr)[1] = (byte)((uint)(pixel) >> 8),\
70
0
  (ptr)[2] = (byte)(pixel)
71
72
#if defined(S_USED) && !defined(S_CONST)
73
0
#define FETCH_S      do { S = GET24(s); s += 3; } while (0==1)
74
#else /* !defined(S_USED) || defined(S_CONST) */
75
#define FETCH_S
76
#endif /* !defined(S_USED) || defined(S_CONST) */
77
78
#if defined(T_USED) && !defined(T_CONST)
79
0
#define FETCH_T      do { T = GET24(t); t += 3; } while (0 == 1)
80
#else /* !defined(T_USED) || defined(T_CONST) */
81
#define FETCH_T
82
#endif /* !defined(T_USED) || defined(T_CONST) */
83
84
static void TEMPLATE_NAME(rop_run_op *op, byte *d, int len)
85
0
{
86
#ifndef SPECIFIC_CODE
87
0
    rop_proc     proc = rop_proc_table[lop_rop(op->rop)];
88
0
#define SPECIFIC_CODE(OUT_, D_,S_,T_) OUT_ = proc(D_,S_,T_)
89
#endif /* !defined(SPECIFIC_CODE) */
90
0
#ifdef S_USED
91
#ifdef S_CONST
92
    rop_operand  S = op->s.c;
93
#else /* !defined(S_CONST) */
94
    const byte  *s = op->s.b.ptr;
95
#endif /* !defined(S_CONST) */
96
#ifdef S_1BIT
97
    int          sroll;
98
    rop_operand  sc[2];
99
#endif /* S_1BIT */
100
#else /* !defined(S_USED) */
101
#define S 0
102
#undef S_CONST
103
#endif /* !defined(S_USED) */
104
#ifdef T_USED
105
#ifdef T_CONST
106
    rop_operand  T = op->t.c;
107
#else /* !defined(T_CONST) */
108
    const byte  *t = op->t.b.ptr;
109
#endif /* !defined(T_CONST) */
110
#ifdef T_1BIT
111
    int          troll;
112
    rop_operand  tc[2];
113
#endif /* T_1BIT */
114
#else /* !defined(T_USED) */
115
#define T 0
116
#undef T_CONST
117
#endif /* !defined(T_USED) */
118
119
#ifdef S_1BIT
120
#if S_1BIT == MAYBE
121
0
    if (op->flags & rop_s_1bit) {
122
0
#endif /* S_1BIT == MAYBE */
123
0
        s += op->s.b.pos>>3;
124
0
        sroll = 8-(op->s.b.pos & 7);
125
0
        sc[0] = ((const gx_color_index *)op->scolors)[0];
126
0
        sc[1] = ((const gx_color_index *)op->scolors)[1];
127
#if S_1BIT == MAYBE
128
    } else
129
0
        sroll = 0;
130
#endif /* S_1BIT == MAYBE */
131
#endif /* defined(S_1BIT) */
132
#ifdef T_1BIT
133
#if T_1BIT == MAYBE
134
0
    if (op->flags & rop_t_1bit) {
135
0
#endif /* T_1BIT == MAYBE */
136
0
        t += op->t.b.pos>>3;
137
0
        troll = 8-(op->t.b.pos & 7);
138
0
        tc[0] = ((const gx_color_index *)op->tcolors)[0];
139
0
        tc[1] = ((const gx_color_index *)op->tcolors)[1];
140
0
#if T_1BIT == MAYBE
141
0
    } else
142
0
        troll = 0;
143
#endif /* T_1BIT == MAYBE */
144
#endif /* defined(T_1BIT) */
145
0
    do {
146
#if defined(S_USED) && !defined(S_CONST)
147
        rop_operand S;
148
#endif /* defined(S_USED) && !defined(S_CONST) */
149
#if defined(T_USED) && !defined(T_CONST)
150
        rop_operand T;
151
#endif /* defined(T_USED) && !defined(T_CONST) */
152
#if defined(S_1BIT) && S_1BIT == MAYBE
153
0
        if (sroll == 0) {
154
0
#endif /* defined(S_1BIT) && S_1BIT == MAYBE */
155
#if !defined(S_1BIT) || S_1BIT == MAYBE
156
0
            FETCH_S;
157
#endif /* !defined(S_1BIT) || S_1BIT == MAYBE */
158
#if defined(S_1BIT) && S_1BIT == MAYBE
159
        } else
160
0
#endif /* defined(S_1BIT) && S_1BIT == MAYBE */
161
0
        {
162
#ifdef S_1BIT
163
            --sroll;
164
            S = sc[(*s >> sroll) & 1];
165
0
            if (sroll == 0) {
166
0
                sroll = 8;
167
0
                s++;
168
0
            }
169
#endif /* S_1BIT */
170
0
        }
171
#if defined(T_1BIT) && T_1BIT == MAYBE
172
0
        if (troll == 0) {
173
0
#endif /* defined(T_1BIT) && T_1BIT == MAYBE */
174
0
#if !defined(T_1BIT) || T_1BIT == MAYBE
175
0
            FETCH_T;
176
0
#endif /* defined(T_1BIT) && T_1BIT == MAYBE */
177
#if defined(T_1BIT) && T_1BIT == MAYBE
178
        } else
179
0
#endif /* defined(T_1BIT) && T_1BIT == MAYBE */
180
0
        {
181
#ifdef T_1BIT
182
            --troll;
183
            T = tc[(*t >> troll) & 1];
184
0
            if (troll == 0) {
185
0
                troll = 8;
186
0
                t++;
187
0
            }
188
#endif /* T_1BIT */
189
0
        }
190
0
        {
191
0
            rop_operand D;
192
0
            SPECIFIC_CODE(D, GET24(d), S, T);
193
0
            PUT24(d, D);
194
0
        }
195
0
        d += 3;
196
0
    }
197
0
    while (--len);
198
0
}
Unexecuted instantiation: gsroprun.c:xor_rop_run24_const_st
Unexecuted instantiation: gsroprun.c:sets_rop_run24
Unexecuted instantiation: gsroprun.c:generic_rop_run24
Unexecuted instantiation: gsroprun.c:generic_rop_run24_1bit
Unexecuted instantiation: gsroprun.c:generic_rop_run24_const_t
Unexecuted instantiation: gsroprun.c:generic_rop_run24_1bit_const_t
Unexecuted instantiation: gsroprun.c:generic_rop_run24_const_st
199
200
#undef GET24
201
#undef PUT24
202
#undef FETCH_S
203
#undef FETCH_T
204
#undef S
205
#undef S_1BIT
206
#undef S_USED
207
#undef S_CONST
208
#undef SPECIFIC_CODE
209
#undef SPECIFIC_ROP
210
#undef T
211
#undef T_1BIT
212
#undef T_USED
213
#undef T_CONST
214
#undef TEMPLATE_NAME
215
216
#else
217
int dummy;
218
#endif