1 /* Copyright (C) 1995, 1997, 1998, 2001 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: gsroptab.c,v 1.5 2002/02/21 22:24:52 giles Exp $ */ 18 /* Table of RasterOp procedures */ 19 #include "stdpre.h" 20 #include "gsropt.h" 21 22 /* 23 * The H-P documentation (probably copied from Microsoft documentation) 24 * specifies RasterOp algorithms using reverse Polish notation, with 25 * a = AND, o = OR, n = NOT, x = XOR 26 */ 27 28 #define ROP_PROC(pname, expr)\ 29 private rop_operand pname(rop_operand D, rop_operand S, rop_operand T)\ 30 { return expr; } 31 32 #define a(u,v) (u&v) 33 #define o(u,v) (u|v) 34 #define x(u,v) (u^v) 35 36 ROP_PROC(rop0, 0) /* 0 */ 37 ROP_PROC(rop1, ~(D | S | T)) /* DTSoon */ 38 ROP_PROC(rop2, D & ~(S | T)) /* DTSona */ 39 ROP_PROC(rop3, ~(S | T)) /* TSon */ 40 ROP_PROC(rop4, S & ~(D | T)) /* SDTona */ 41 ROP_PROC(rop5, ~(D | T)) /* DTon */ 42 ROP_PROC(rop6, ~(T | ~(D ^ S))) /* TDSxnon */ 43 ROP_PROC(rop7, ~(T | (D & S))) /* TDSaon */ 44 ROP_PROC(rop8, S & (D & ~T)) /* SDTnaa */ 45 ROP_PROC(rop9, ~(T | (D ^ S))) /* TDSxon */ 46 ROP_PROC(rop10, D & ~T) /* DTna */ 47 ROP_PROC(rop11, ~(T | (S & ~D))) /* TSDnaon */ 48 ROP_PROC(rop12, S & ~T) /* STna */ 49 ROP_PROC(rop13, ~(T | (D & ~S))) /* TDSnaon */ 50 ROP_PROC(rop14, ~(T | ~(D | S))) /* TDSonon */ 51 ROP_PROC(rop15, ~T) /* Tn */ 52 ROP_PROC(rop16, T & ~(D | S)) /* TDSona */ 53 ROP_PROC(rop17, ~(D | S)) /* DSon */ 54 ROP_PROC(rop18, ~(S | ~(D ^ T))) /* SDTxnon */ 55 ROP_PROC(rop19, ~(S | (D & T))) /* SDTaon */ 56 ROP_PROC(rop20, ~(D | ~(T ^ S))) /* DTSxnon */ 57 ROP_PROC(rop21, ~(D | (T & S))) /* DTSaon */ 58 ROP_PROC(rop22, (T ^ (S ^ (D & ~(T & S))))) /* TSDTSanaxx */ 59 ROP_PROC(rop23, ~(S ^ ((S ^ T) & (D ^ S)))) /* SSTxDSxaxn */ 60 ROP_PROC(rop24, (S ^ T) & (T ^ D)) /* STxTDxa */ 61 ROP_PROC(rop25, ~(S ^ (D & ~(T & S)))) /* SDTSanaxn */ 62 ROP_PROC(rop26, T ^ (D | (S & T))) /* TDSTaox */ 63 ROP_PROC(rop27, ~(S ^ (D & (T ^ S)))) /* SDTSxaxn */ 64 ROP_PROC(rop28, T ^ (S | (D & T))) /* TSDTaox */ 65 ROP_PROC(rop29, ~(D ^ (S & (T ^ D)))) /* DSTDxaxn */ 66 ROP_PROC(rop30, T ^ (D | S)) /* TDSox */ 67 ROP_PROC(rop31, ~(T & (D | S))) /* TDSoan */ 68 ROP_PROC(rop32, D & (T & ~S)) /* DTSnaa */ 69 ROP_PROC(rop33, ~(S | (D ^ T))) /* SDTxon */ 70 ROP_PROC(rop34, D & ~S) /* DSna */ 71 ROP_PROC(rop35, ~(S | (T & ~D))) /* STDnaon */ 72 ROP_PROC(rop36, (S ^ T) & (D ^ S)) /* STxDSxa */ 73 ROP_PROC(rop37, ~(T ^ (D & ~(S & T)))) /* TDSTanaxn */ 74 ROP_PROC(rop38, S ^ (D | (T & S))) /* SDTSaox */ 75 ROP_PROC(rop39, S ^ (D | ~(T ^ S))) /* SDTSxnox */ 76 ROP_PROC(rop40, D & (T ^ S)) /* DTSxa */ 77 ROP_PROC(rop41, ~(T ^ (S ^ (D | (T & S))))) /* TSDTSaoxxn */ 78 ROP_PROC(rop42, D & ~(T & S)) /* DTSana */ 79 ROP_PROC(rop43, ~x(a(x(D, T), x(T, S)), S)) /* SSTxTDxaxn */ 80 ROP_PROC(rop44, (S ^ (T & (D | S)))) /* STDSoax */ 81 ROP_PROC(rop45, T ^ (S | ~D)) /* TSDnox */ 82 ROP_PROC(rop46, (T ^ (S | (D ^ T)))) /* TSDTxox */ 83 ROP_PROC(rop47, ~(T & (S | ~D))) /* TSDnoan */ 84 ROP_PROC(rop48, T & ~S) /* TSna */ 85 ROP_PROC(rop49, ~(S | (D & ~T))) /* SDTnaon */ 86 ROP_PROC(rop50, S ^ (D | (T | S))) /* SDTSoox */ 87 ROP_PROC(rop51, ~S) /* Sn */ 88 ROP_PROC(rop52, S ^ (T | (D & S))) /* STDSaox */ 89 ROP_PROC(rop53, S ^ (T | ~(D ^ S))) /* STDSxnox */ 90 ROP_PROC(rop54, S ^ (D | T)) /* SDTox */ 91 ROP_PROC(rop55, ~(S & (D | T))) /* SDToan */ 92 ROP_PROC(rop56, T ^ (S & (D | T))) /* TSDToax */ 93 ROP_PROC(rop57, S ^ (T | ~D)) /* STDnox */ 94 ROP_PROC(rop58, S ^ (T | (D ^ S))) /* STDSxox */ 95 ROP_PROC(rop59, ~(S & (T | ~D))) /* STDnoan */ 96 ROP_PROC(rop60, T ^ S) /* TSx */ 97 ROP_PROC(rop61, S ^ (T | ~(D | S))) /* STDSonox */ 98 ROP_PROC(rop62, S ^ (T | (D & ~S))) /* STDSnaox */ 99 ROP_PROC(rop63, ~(T & S)) /* TSan */ 100 ROP_PROC(rop64, T & (S & ~D)) /* TSDnaa */ 101 ROP_PROC(rop65, ~(D | (T ^ S))) /* DTSxon */ 102 ROP_PROC(rop66, (S ^ D) & (T ^ D)) /* SDxTDxa */ 103 ROP_PROC(rop67, ~(S ^ (T & ~(D & S)))) /* STDSanaxn */ 104 ROP_PROC(rop68, S & ~D) /* SDna */ 105 ROP_PROC(rop69, ~(D | (T & ~S))) /* DTSnaon */ 106 ROP_PROC(rop70, D ^ (S | (T & D))) /* DSTDaox */ 107 ROP_PROC(rop71, ~(T ^ (S & (D ^ T)))) /* TSDTxaxn */ 108 ROP_PROC(rop72, S & (D ^ T)) /* SDTxa */ 109 ROP_PROC(rop73, ~(T ^ (D ^ (S | (T & D))))) /* TDSTDaoxxn */ 110 ROP_PROC(rop74, D ^ (T & (S | D))) /* DTSDoax */ 111 ROP_PROC(rop75, T ^ (D | ~S)) /* TDSnox */ 112 ROP_PROC(rop76, S & ~(D & T)) /* SDTana */ 113 ROP_PROC(rop77, ~(S ^ ((S ^ T) | (D ^ S)))) /* SSTxDSxoxn */ 114 ROP_PROC(rop78, T ^ (D | (S ^ T))) /* TDSTxox */ 115 ROP_PROC(rop79, ~(T & (D | ~S))) /* TDSnoan */ 116 ROP_PROC(rop80, T & ~D) /* TDna */ 117 ROP_PROC(rop81, ~(D | (S & ~T))) /* DSTnaon */ 118 ROP_PROC(rop82, D ^ (T | (S & D))) /* DTSDaox */ 119 ROP_PROC(rop83, ~(S ^ (T & (D ^ S)))) /* STDSxaxn */ 120 ROP_PROC(rop84, ~(D | ~(T | S))) /* DTSonon */ 121 ROP_PROC(rop85, ~D) /* Dn */ 122 ROP_PROC(rop86, D ^ (T | S)) /* DTSox */ 123 ROP_PROC(rop87, ~(D & (T | S))) /* DTSoan */ 124 ROP_PROC(rop88, T ^ (D & (S | T))) /* TDSToax */ 125 ROP_PROC(rop89, D ^ (T | ~S)) /* DTSnox */ 126 ROP_PROC(rop90, D ^ T) /* DTx */ 127 ROP_PROC(rop91, D ^ (T | ~(S | D))) /* DTSDonox */ 128 ROP_PROC(rop92, D ^ (T | (S ^ D))) /* DTSDxox */ 129 ROP_PROC(rop93, ~(D & (T | ~S))) /* DTSnoan */ 130 ROP_PROC(rop94, D ^ (T | (S & ~D))) /* DTSDnaox */ 131 ROP_PROC(rop95, ~(D & T)) /* DTan */ 132 ROP_PROC(rop96, T & (D ^ S)) /* TDSxa */ 133 ROP_PROC(rop97, ~(D ^ (S ^ (T | (D & S))))) /* DSTDSaoxxn */ 134 ROP_PROC(rop98, D ^ (S & (T | D))) /* DSTDoax */ 135 ROP_PROC(rop99, S ^ (D | ~T)) /* SDTnox */ 136 ROP_PROC(rop100, S ^ (D & (T | S))) /* SDTSoax */ 137 ROP_PROC(rop101, D ^ (S | ~T)) /* DSTnox */ 138 ROP_PROC(rop102, D ^ S) /* DSx */ 139 ROP_PROC(rop103, S ^ (D | ~(T | S))) /* SDTSonox */ 140 ROP_PROC(rop104, ~(D ^ (S ^ (T | ~(D | S))))) /* DSTDSonoxxn */ 141 ROP_PROC(rop105, ~(T ^ (D ^ S))) /* TDSxxn */ 142 ROP_PROC(rop106, D ^ (T & S)) /* DTSax */ 143 ROP_PROC(rop107, ~(T ^ (S ^ (D & (T | S))))) /* TSDTSoaxxn */ 144 ROP_PROC(rop108, (D & T) ^ S) /* SDTax */ 145 ROP_PROC(rop109, ~((((T | D) & S) ^ D) ^ T)) /* TDSTDoaxxn */ 146 ROP_PROC(rop110, ((~S | T) & D) ^ S) /* SDTSnoax */ 147 ROP_PROC(rop111, ~(~(D ^ S) & T)) /* TDSxnan */ 148 ROP_PROC(rop112, ~(D & S) & T) /* TDSana */ 149 ROP_PROC(rop113, ~(((S ^ D) & (T ^ D)) ^ S)) /* SSDxTDxaxn */ 150 ROP_PROC(rop114, ((T ^ S) | D) ^ S) /* SDTSxox */ 151 ROP_PROC(rop115, ~((~T | D) & S)) /* SDTnoan */ 152 ROP_PROC(rop116, ((T ^ D) | S) ^ D) /* DSTDxox */ 153 ROP_PROC(rop117, ~((~T | S) & D)) /* DSTnoan */ 154 ROP_PROC(rop118, ((~S & T) | D) ^ S) /* SDTSnaox */ 155 ROP_PROC(rop119, ~(D & S)) /* DSan */ 156 ROP_PROC(rop120, (D & S) ^ T) /* TDSax */ 157 ROP_PROC(rop121, ~((((D | S) & T) ^ S) ^ D)) /* DSTDSoaxxn */ 158 ROP_PROC(rop122, ((~D | S) & T) ^ D) /* DTSDnoax */ 159 ROP_PROC(rop123, ~(~(D ^ T) & S)) /* SDTxnan */ 160 ROP_PROC(rop124, ((~S | D) & T) ^ S) /* STDSnoax */ 161 ROP_PROC(rop125, ~(~(T ^ S) & D)) /* DTSxnan */ 162 ROP_PROC(rop126, (S ^ T) | (D ^ S)) /* STxDSxo */ 163 ROP_PROC(rop127, ~((T & S) & D)) /* DTSaan */ 164 ROP_PROC(rop128, (T & S) & D) /* DTSaa */ 165 ROP_PROC(rop129, ~((S ^ T) | (D ^ S))) /* STxDSxon */ 166 ROP_PROC(rop130, ~(T ^ S) & D) /* DTSxna */ 167 ROP_PROC(rop131, ~(((~S | D) & T) ^ S)) /* STDSnoaxn */ 168 ROP_PROC(rop132, ~(D ^ T) & S) /* SDTxna */ 169 ROP_PROC(rop133, ~(((~T | S) & D) ^ T)) /* TDSTnoaxn */ 170 ROP_PROC(rop134, (((D | S) & T) ^ S) ^ D) /* DSTDSoaxx */ 171 ROP_PROC(rop135, ~((D & S) ^ T)) /* TDSaxn */ 172 ROP_PROC(rop136, D & S) /* DSa */ 173 ROP_PROC(rop137, ~(((~S & T) | D) ^ S)) /* SDTSnaoxn */ 174 ROP_PROC(rop138, (~T | S) & D) /* DSTnoa */ 175 ROP_PROC(rop139, ~(((T ^ D) | S) ^ D)) /* DSTDxoxn */ 176 ROP_PROC(rop140, (~T | D) & S) /* SDTnoa */ 177 ROP_PROC(rop141, ~(((T ^ S) | D) ^ S)) /* SDTSxoxn */ 178 ROP_PROC(rop142, ((S ^ D) & (T ^ D)) ^ S) /* SSDxTDxax */ 179 ROP_PROC(rop143, ~(~(D & S) & T)) /* TDSanan */ 180 ROP_PROC(rop144, ~(D ^ S) & T) /* TDSxna */ 181 ROP_PROC(rop145, ~(((~S | T) & D) ^ S)) /* SDTSnoaxn */ 182 ROP_PROC(rop146, (((D | T) & S) ^ T) ^ D) /* DTSDToaxx */ 183 ROP_PROC(rop147, ~((T & D) ^ S)) /* STDaxn */ 184 ROP_PROC(rop148, (((T | S) & D) ^ S) ^ T) /* TSDTSoaxx */ 185 ROP_PROC(rop149, ~((T & S) ^ D)) /* DTSaxn */ 186 ROP_PROC(rop150, (T ^ S) ^ D) /* DTSxx */ 187 ROP_PROC(rop151, ((~(T | S) | D) ^ S) ^ T) /* TSDTSonoxx */ 188 ROP_PROC(rop152, ~((~(T | S) | D) ^ S)) /* SDTSonoxn */ 189 ROP_PROC(rop153, ~(D ^ S)) /* DSxn */ 190 ROP_PROC(rop154, (~S & T) ^ D) /* DTSnax */ 191 ROP_PROC(rop155, ~(((T | S) & D) ^ S)) /* SDTSoaxn */ 192 ROP_PROC(rop156, (~D & T) ^ S) /* STDnax */ 193 ROP_PROC(rop157, ~(((T | D) & S) ^ D)) /* DSTDoaxn */ 194 ROP_PROC(rop158, (((D & S) | T) ^ S) ^ D) /* DSTDSaoxx */ 195 ROP_PROC(rop159, ~((D ^ S) & T)) /* TDSxan */ 196 ROP_PROC(rop160, D & T) /* DTa */ 197 ROP_PROC(rop161, ~(((~T & S) | D) ^ T)) /* TDSTnaoxn */ 198 ROP_PROC(rop162, (~S | T) & D) /* DTSnoa */ 199 ROP_PROC(rop163, ~(((D ^ S) | T) ^ D)) /* DTSDxoxn */ 200 ROP_PROC(rop164, ~((~(T | S) | D) ^ T)) /* TDSTonoxn */ 201 ROP_PROC(rop165, ~(D ^ T)) /* TDxn */ 202 ROP_PROC(rop166, (~T & S) ^ D) /* DSTnax */ 203 ROP_PROC(rop167, ~(((T | S) & D) ^ T)) /* TDSToaxn */ 204 ROP_PROC(rop168, ((S | T) & D)) /* DTSoa */ 205 ROP_PROC(rop169, ~((S | T) ^ D)) /* DTSoxn */ 206 ROP_PROC(rop170, D) /* D */ 207 ROP_PROC(rop171, ~(S | T) | D) /* DTSono */ 208 ROP_PROC(rop172, (((S ^ D) & T) ^ S)) /* STDSxax */ 209 ROP_PROC(rop173, ~(((D & S) | T) ^ D)) /* DTSDaoxn */ 210 ROP_PROC(rop174, (~T & S) | D) /* DSTnao */ 211 ROP_PROC(rop175, ~T | D) /* DTno */ 212 ROP_PROC(rop176, (~S | D) & T) /* TDSnoa */ 213 ROP_PROC(rop177, ~(((T ^ S) | D) ^ T)) /* TDSTxoxn */ 214 ROP_PROC(rop178, ((S ^ D) | (S ^ T)) ^ S) /* SSTxDSxox */ 215 ROP_PROC(rop179, ~(~(T & D) & S)) /* SDTanan */ 216 ROP_PROC(rop180, (~D & S) ^ T) /* TSDnax */ 217 ROP_PROC(rop181, ~(((D | S) & T) ^ D)) /* DTSDoaxn */ 218 ROP_PROC(rop182, (((T & D) | S) ^ T) ^ D) /* DTSDTaoxx */ 219 ROP_PROC(rop183, ~((T ^ D) & S)) /* SDTxan */ 220 ROP_PROC(rop184, ((T ^ D) & S) ^ T) /* TSDTxax */ 221 ROP_PROC(rop185, (~((D & T) | S) ^ D)) /* DSTDaoxn */ 222 ROP_PROC(rop186, (~S & T) | D) /* DTSnao */ 223 ROP_PROC(rop187, ~S | D) /* DSno */ 224 ROP_PROC(rop188, (~(S & D) & T) ^ S) /* STDSanax */ 225 ROP_PROC(rop189, ~((D ^ T) & (D ^ S))) /* SDxTDxan */ 226 ROP_PROC(rop190, (S ^ T) | D) /* DTSxo */ 227 ROP_PROC(rop191, ~(S & T) | D) /* DTSano */ 228 ROP_PROC(rop192, T & S) /* TSa */ 229 ROP_PROC(rop193, ~(((~S & D) | T) ^ S)) /* STDSnaoxn */ 230 ROP_PROC(rop194, ~x(o(~o(S, D), T), S)) /* STDSonoxn */ 231 ROP_PROC(rop195, ~(S ^ T)) /* TSxn */ 232 ROP_PROC(rop196, ((~D | T) & S)) /* STDnoa */ 233 ROP_PROC(rop197, ~(((S ^ D) | T) ^ S)) /* STDSxoxn */ 234 ROP_PROC(rop198, ((~T & D) ^ S)) /* SDTnax */ 235 ROP_PROC(rop199, ~(((T | D) & S) ^ T)) /* TSDToaxn */ 236 ROP_PROC(rop200, ((T | D) & S)) /* SDToa */ 237 ROP_PROC(rop201, ~((D | T) ^ S)) /* STDoxn */ 238 ROP_PROC(rop202, ((D ^ S) & T) ^ D) /* DTSDxax */ 239 ROP_PROC(rop203, ~(((S & D) | T) ^ S)) /* STDSaoxn */ 240 ROP_PROC(rop204, S) /* S */ 241 ROP_PROC(rop205, ~(T | D) | S) /* SDTono */ 242 ROP_PROC(rop206, (~T & D) | S) /* SDTnao */ 243 ROP_PROC(rop207, ~T | S) /* STno */ 244 ROP_PROC(rop208, (~D | S) & T) /* TSDnoa */ 245 ROP_PROC(rop209, ~(((T ^ D) | S) ^ T)) /* TSDTxoxn */ 246 ROP_PROC(rop210, (~S & D) ^ T) /* TDSnax */ 247 ROP_PROC(rop211, ~(((S | D) & T) ^ S)) /* STDSoaxn */ 248 ROP_PROC(rop212, x(a(x(D, T), x(T, S)), S)) /* SSTxTDxax */ 249 ROP_PROC(rop213, ~(~(S & T) & D)) /* DTSanan */ 250 ROP_PROC(rop214, ((((S & T) | D) ^ S) ^ T)) /* TSDTS aoxx */ 251 ROP_PROC(rop215, ~((S ^ T) & D)) /* DTS xan */ 252 ROP_PROC(rop216, ((T ^ S) & D) ^ T) /* TDST xax */ 253 ROP_PROC(rop217, ~(((S & T) | D) ^ S)) /* SDTS aoxn */ 254 ROP_PROC(rop218, x(a(~a(D, S), T), D)) /* DTSD anax */ 255 ROP_PROC(rop219, ~a(x(S, D), x(T, S))) /* STxDSxan */ 256 ROP_PROC(rop220, (~D & T) | S) /* STD nao */ 257 ROP_PROC(rop221, ~D | S) /* SDno */ 258 ROP_PROC(rop222, (T ^ D) | S) /* SDT xo */ 259 ROP_PROC(rop223, (~(T & D)) | S) /* SDT ano */ 260 ROP_PROC(rop224, ((S | D) & T)) /* TDS oa */ 261 ROP_PROC(rop225, ~((S | D) ^ T)) /* TDS oxn */ 262 ROP_PROC(rop226, (((D ^ T) & S) ^ D)) /* DSTD xax */ 263 ROP_PROC(rop227, ~(((T & D) | S) ^ T)) /* TSDT aoxn */ 264 ROP_PROC(rop228, ((S ^ T) & D) ^ S) /* SDTSxax */ 265 ROP_PROC(rop229, ~(((T & S) | D) ^ T)) /* TDST aoxn */ 266 ROP_PROC(rop230, (~(S & T) & D) ^ S) /* SDTSanax */ 267 ROP_PROC(rop231, ~a(x(D, T), x(T, S))) /* STxTDxan */ 268 ROP_PROC(rop232, x(a(x(S, D), x(T, S)), S)) /* SS TxD Sxax */ 269 ROP_PROC(rop233, ~x(x(a(~a(S, D), T), S), D)) /* DST DSan axxn */ 270 ROP_PROC(rop234, (S & T) | D) /* DTSao */ 271 ROP_PROC(rop235, ~(S ^ T) | D) /* DTSxno */ 272 ROP_PROC(rop236, (T & D) | S) /* SDTao */ 273 ROP_PROC(rop237, ~(T ^ D) | S) /* SDTxno */ 274 ROP_PROC(rop238, S | D) /* DSo */ 275 ROP_PROC(rop239, (~T | D) | S) /* SDTnoo */ 276 ROP_PROC(rop240, T) /* T */ 277 ROP_PROC(rop241, ~(S | D) | T) /* TDSono */ 278 ROP_PROC(rop242, (~S & D) | T) /* TDSnao */ 279 ROP_PROC(rop243, ~S | T) /* TSno */ 280 ROP_PROC(rop244, (~D & S) | T) /* TSDnao */ 281 ROP_PROC(rop245, ~D | T) /* TDno */ 282 ROP_PROC(rop246, (S ^ D) | T) /* TDSxo */ 283 ROP_PROC(rop247, ~(S & D) | T) /* TDSano */ 284 ROP_PROC(rop248, (S & D) | T) /* TDSao */ 285 ROP_PROC(rop249, ~(S ^ D) | T) /* TDSxno */ 286 ROP_PROC(rop250, D | T) /* DTo */ 287 ROP_PROC(rop251, (~S | T) | D) /* DTSnoo */ 288 ROP_PROC(rop252, S | T) /* TSo */ 289 ROP_PROC(rop253, (~D | S) | T) /* TSDnoo */ 290 ROP_PROC(rop254, S | T | D) /* DTSoo */ 291 ROP_PROC(rop255, ~(rop_operand) 0) /* 1 */ 292 #undef ROP_PROC 293 294 const rop_proc rop_proc_table[256] = { 295 rop0, rop1, rop2, rop3, rop4, rop5, rop6, rop7, 296 rop8, rop9, rop10, rop11, rop12, rop13, rop14, rop15, 297 rop16, rop17, rop18, rop19, rop20, rop21, rop22, rop23, 298 rop24, rop25, rop26, rop27, rop28, rop29, rop30, rop31, 299 rop32, rop33, rop34, rop35, rop36, rop37, rop38, rop39, 300 rop40, rop41, rop42, rop43, rop44, rop45, rop46, rop47, 301 rop48, rop49, rop50, rop51, rop52, rop53, rop54, rop55, 302 rop56, rop57, rop58, rop59, rop60, rop61, rop62, rop63, 303 rop64, rop65, rop66, rop67, rop68, rop69, rop70, rop71, 304 rop72, rop73, rop74, rop75, rop76, rop77, rop78, rop79, 305 rop80, rop81, rop82, rop83, rop84, rop85, rop86, rop87, 306 rop88, rop89, rop90, rop91, rop92, rop93, rop94, rop95, 307 rop96, rop97, rop98, rop99, rop100, rop101, rop102, rop103, 308 rop104, rop105, rop106, rop107, rop108, rop109, rop110, rop111, 309 rop112, rop113, rop114, rop115, rop116, rop117, rop118, rop119, 310 rop120, rop121, rop122, rop123, rop124, rop125, rop126, rop127, 311 rop128, rop129, rop130, rop131, rop132, rop133, rop134, rop135, 312 rop136, rop137, rop138, rop139, rop140, rop141, rop142, rop143, 313 rop144, rop145, rop146, rop147, rop148, rop149, rop150, rop151, 314 rop152, rop153, rop154, rop155, rop156, rop157, rop158, rop159, 315 rop160, rop161, rop162, rop163, rop164, rop165, rop166, rop167, 316 rop168, rop169, rop170, rop171, rop172, rop173, rop174, rop175, 317 rop176, rop177, rop178, rop179, rop180, rop181, rop182, rop183, 318 rop184, rop185, rop186, rop187, rop188, rop189, rop190, rop191, 319 rop192, rop193, rop194, rop195, rop196, rop197, rop198, rop199, 320 rop200, rop201, rop202, rop203, rop204, rop205, rop206, rop207, 321 rop208, rop209, rop210, rop211, rop212, rop213, rop214, rop215, 322 rop216, rop217, rop218, rop219, rop220, rop221, rop222, rop223, 323 rop224, rop225, rop226, rop227, rop228, rop229, rop230, rop231, 324 rop232, rop233, rop234, rop235, rop236, rop237, rop238, rop239, 325 rop240, rop241, rop242, rop243, rop244, rop245, rop246, rop247, 326 rop248, rop249, rop250, rop251, rop252, rop253, rop254, rop255 327 }; 328 329 /* 330 * Here is the program that generated the table below. 331 * 332 int 333 main(int argc, char *argv[]) 334 { uint i; 335 for ( i = 0; i < 256; ++i ) 336 printf("%d,", 337 (rop3_uses_D(i) ? rop_usage_D : 0) | 338 (rop3_uses_S(i) ? rop_usage_S : 0) | 339 (rop3_uses_T(i) ? rop_usage_T : 0)); 340 fflush(stdout); 341 return 0; 342 } 343 */ 344 345 const byte /*rop_usage_t */ rop_usage_table[256] = 346 { 347 0, 7, 7, 6, 7, 5, 7, 7, 7, 7, 5, 7, 6, 7, 7, 4, 348 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 349 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 350 6, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 6, 351 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 352 5, 7, 7, 7, 7, 1, 7, 7, 7, 7, 5, 7, 7, 7, 7, 5, 353 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 354 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 355 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 356 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 357 5, 7, 7, 7, 7, 5, 7, 7, 7, 7, 1, 7, 7, 7, 7, 5, 358 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 359 6, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 6, 360 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 361 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 362 4, 7, 7, 6, 7, 5, 7, 7, 7, 7, 5, 7, 6, 7, 7, 0 363 }; 364