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